659 Shares 5266 views

PHP jest zmienną globalną w funkcji. Utwórz zmienną globalną w PHP

Aby utworzyć pełnowartościową witrynę, która ma szeroką funkcjonalność, musisz wiedzieć o tym wiele. Ale co może dać mu wyjątkową unikatowość to PHP. Zmienna globalna w tym języku programowania nie jest często używana, ale czasami trzeba wiedzieć, jak to działa. Badając, co to jest i jak to działa, zajmiemy się tym artykułem.


Zakres

Jest to nazwa kontekstu, w którym zmienna jest zdefiniowana. W większości przypadków mają one tylko jeden zakres. Kiedy w zmiennych globalnych PHP są ładowane z innych plików, w nim mogą być dołączone (dołączone) i wymagane (wymagają).

Domyślnie są one ograniczone do lokalnego zakresu funkcji. I jak chcesz, aby zmienna była widoczna przez pliki poza jego granicami i czy mogłyby być używane? W tym celu PHP udostępnia również zmienną globalną.

Słowa kluczowe "global"

Ale jak deklarować globalną zmienną PHP? Osiągając ten cel, pomożemy nam słowo "global". Musisz umieścić ją przed zmienną, która ma zostać utworzona globalnie (na przykład globalnie "Zmienna").

Po wdrożeniu takiej instrukcji każdy plik może pracować z danymi. Jeśli gdzieś są odniesienia do tej zmiennej, program zawsze zwraca uwagę na wersję globalną.

Dlaczego tak dziwne sformułowanie? Faktem jest, że równocześnie z tym mogą występować wersje lokalne. Ale będą dostępne tylko w tych plikach, w których są zadeklarowane. I dla wszystkich innych zmienne globalne klasy PHP będą działać. Dlatego musisz uważać. I tak, że nie ma wątpliwości, oto przykład ich wyglądu: globalny a.

Ponieważ jeśli jeden plik ma dostęp do kilku zmiennych, spowoduje to konflikt. Ale tutaj nie można dokładnie powiedzieć – zmienna lokalna lub globalna zostanie odczytana lub wystąpi błąd. Tak więc, jeśli jest napisane wewnątrz funkcji, nie powinno być żadnych problemów. Ale użycie zmiennej poza jej granicami będzie problematyczne. Dlatego konieczne jest ścisłe monitorowanie struktury kompilacji kodu programu i upewnienie się, że nigdzie nie ma nawet warunków wstępnych do powstania konfliktu.

Inna możliwość nagrywania

Czy jest możliwe aby utworzyć zmienną globalną w PHP w inny sposób? Tak, a nawet nie. Najpierw spójrzmy na $ GLOBALS. Jest to tabela asocjacyjna. Kluczem w nim jest nazwa. Wartość jest zawartością zmiennej globalnej. Należy zauważyć, że tablica ta po deklaracji istnieje w dowolnym zakresie. Daje to podstawę do uznania jej za superglobę. Wygląda tak: $ GLOBALS ['Variable'].

Predefiniowane / superglobale

W każdym języku programowania istnieją pewne nazwy, które są czarterowane dla poszczególnych funkcji. Dlatego nie można tworzyć zmiennych globalnych w PHP o tej samej nazwie.

W tym języku programowania znajdują się specjalne funkcje. Ważne jest to, że predefiniowane zmienne nie mają ustawienia "super", tzn. Nie są dostępne we wszystkich miejscach. Jak mogę to naprawić? Aby predefiniowana zmienna była dostępna w niektórych obszarach lokalnych, musi być zadeklarowana w następujący sposób: global "Variable". To wydaje się być takie samo, jak wcześniej powiedziano, prawda? To prawda, ale nie tak naprawdę. Spójrzmy na przykład "walka"

  • Globalny $ HTTP_POST_VARS;
  • Echo $ HTTP_POST_VARS ['name'].

Czy czujesz różnicę między nimi? Zauważ, że w PHP zmienna globalna nie musi być używana w ramach funkcji. Może być umieszczony w pliku znajdującym się w nim.

Linki i bezpieczeństwo

Jak widać, w PHP, tworzenie zmiennej globalnej nie jest problemem. Czy są jakieś funkcje dotyczące linków? Tak, podczas globalnego używania mogą wystąpić nieoczekiwane zachowanie. Ale zanim to trochę.

W wersji 4.2.0 dyrektywa register_globals zmieniła się domyślnie z off na on. Dla większości użytkowników to nie jest bardzo ważne, ale na próżno. Wszakże ma to bezpośredni wpływ na bezpieczeństwo opracowywanego produktu. Jeśli potrzebujesz zmiennej globalnej, dyrektywa PHP dotycząca tego parametru nie wpłynie na nią bezpośrednio. Ale nieprawidłowe użycie może już tworzyć precedensy dla bezpieczeństwa.

Jeśli więc register_globals jest włączony, przed wykonaniem kodu pisanego różne inicjały inicjują różne zmienne, które są konieczne np. Do wysyłania formularzy HTML. Dlatego postanowiono ją wyłączyć.

Dlaczego jest to stan tej dyrektywy w php zmiennej globalnej ze względu na wiele? Faktem jest, że gdy stan jest włączony, programiści nie zawsze potrafią samodzielnie odpowiedzieć na pytanie, skąd pochodzi. Z jednej strony ułatwienie pisania kodu. Ale z drugiej – stworzyło to zagrożenie dla bezpieczeństwa. Dlatego też, aby uniknąć błędów, jak również mieszania danych i dyrektywy były wyłączone.

Spójrzmy teraz na niezabezpieczony kod, a także jak wykryć przypadki, gdy deklaracją zmiennej globalnej PHP towarzyszy próby spoofowania danych. Jest to konieczne, aby stworzyć nie tylko piękne, ale i stabilne miejsca pracy, które nie łamią pierwszej osoby, która napotyka.

Niebezpieczny kod

Załóżmy, że ta zmienna jest prawdziwa dla tych, którzy zostali upoważnieni:

Jeśli (authenticate_user ()) {
$ Authorize = true;
}

Jeśli ($ autoryzuj) {
Uwzględnij "/highly/sensitive/data.php";
}

W tym stanie zmienna może być ustawiona automatycznie. Biorąc pod uwagę, że dane mogą być po prostu zastąpione, a źródło ich pochodzenia nie jest ustalone, wówczas każda osoba może przejść taką kontrolę i podszywać się pod inną osobę. W razie potrzeby osoba atakująca (lub tylko osobliwa, ale niedoświadczona osoba) może naruszać logikę scenariusza.

Jeśli zmienisz wartość dyrektywy, ten kod może działać poprawnie, jak trzeba. Inicjalizacja zmiennych jest nie tylko dobrym tonem w programowaniu, ale także daje pewne gwarancje stabilności skryptu.

Solidna wersja kodu

Aby osiągnąć ten cel, można wyłączyć działanie tej dyrektywy lub zarejestrować bardziej złożony kod. Na przykład tutaj jest to:

Jeśli (isset ($ _ SESSION ['nazwa_użytkownika']))) {

Echo "Hello {$ _ SESSION ['nazwa_użytkownika']} ";

} Else {

Echo "Witaj Gość
";
Echo "Witaj, uŜytkowniku!";

}

W takim przypadku trudno jest zastąpić. Ale nadal jest to możliwe. W tym celu należy podjąć starania, aby zapewnić szybką odpowiedź. Jeśli chcesz umieścić zmienne globalne w PHP, możesz użyć następującego narzędzia: jeśli znamy zakres, w jakim zostanie uzyskana wartość, możemy ją zarejestrować tak, aby skrypt sprawdzał to za pomocą mapowania. Oczywiście, to również nie gwarantuje pełnej ochrony przed zastąpieniem wartości. Ale tutaj poszukiwanie możliwych opcji znacznie się pogorszy.

Znajduje próbowaną substytucję

Sprawdźmy, jak zrozumiałeś, co napisałeś wcześniej. W zmiennych globalnych PHP w funkcji, która zostanie podana poniżej, musisz zadeklarować siebie. Można powiedzieć, że to jest w jakiś sposób zadanie domowe, aby dowiedzieć się temat lekcji. Oto kod:

<Php
Jeśli (isset ($ _ COOKIE ['C_COOKIE']))) {
} Elseif (isset ($ _ GET ['C_COOKIE']) || isset ($ _ POST ['C_COOKIE'])) {

Mail ("[email protected]", "Ostrzeżenie, skrypt zarejestrował próbę włamania i zgubienia danych, $ _SERVER ['REMOTE_ADDR']);
Echo "Zabezpieczenie zostało naruszone lub próbowano to zrobić." Administrator poinformował ";
Wyjście;

} Else {
}
?>

A teraz wyjaśnienie. Zmienna C_COOKIE przychodzi do nas z wiarygodnego źródła. Aby w pełni zweryfikować oczekiwany wynik, sprawdzamy jego wartość, aw razie problemów powiadom o tym administratora. Jeśli nic nie nastąpiło, nie należy podejmować żadnych działań. Należy zrozumieć, że po prostu wyłączenie dyrektywy register_globals nie zapewnia bezpieczeństwa Twojego kodu. Dlatego też każda zmienna, którą skrypt otrzyma od użytkownika, musi być sprawdzony pod kątem oczekiwanej wartości.

Wnioski

To w ogóle i wszystko, co trzeba wiedzieć o zmiennych globalnych, w celu skutecznego i bezpiecznego wykorzystania ich w swoich działaniach. Oczywiście, aby powiedzieć, że istnieje pełna gwarancja, że nikt nie może jej użyć – krakersy stale podnoszą swoje metody i umiejętności. Z tego względu pożądane jest ograniczenie stosowania maksimum zmiennych w kodzie do maksimum. Na szczęście struktura i cechy konstrukcyjne tego języka programowania mogą osiągnąć ten cel. Powodzenia!