Minderung von Directory Traversal-Schwachstellen in PHP: Pfade sicher bewahren
Das Verhindern unbefugten Zugriffs auf sensible Verzeichnisse ist bei der PHP-Entwicklung von entscheidender Bedeutung. Schwachstellen beim Durchsuchen von Verzeichnissen stellen eine erhebliche Bedrohung dar, da Angreifer eine unsachgemäße Eingabevalidierung ausnutzen können, um außerhalb bestimmter Verzeichnisse zu navigieren.
Im genannten Szenario haben Sie einen Basispfad „/whatever/foo/“ und müssen Pfade zulassen Im Vergleich dazu können absolute Pfade wie „…“ oder „./..“ nicht als Filter verwendet werden, da sie nicht in der Lage sind, Traversal-Angriffe zu verhindern.
Zur Lösung Eine effektive Lösung besteht darin, reale Pfade zu vergleichen. So funktioniert es:
$basepath = '/foo/bar/baz/'; $realBase = realpath($basepath); $userpath = $basepath . $_GET['path']; $realUserPath = realpath($userpath); if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) { // Directory Traversal Detected } else { // Valid Path }
Die realpath()-Funktion löst bereitgestellte Pfade in ihre entsprechenden physischen Pfade auf und eliminiert symbolische Links, „Punkt“-Navigation und andere Pfadmanipulationstricks. Durch den Vergleich des tatsächlichen Pfads des Benutzerpfads mit dem tatsächlichen Pfad des Basispfads können Sie feststellen, ob ein Durchquerungsversuch unternommen wurde. Wenn der echte Benutzerpfad nicht mit dem echten Basispfad beginnt, kommt es wahrscheinlich zu einer Traversierung.
Beachten Sie, dass die Ausgabe von realpath() virtuelle Verzeichnisse wie „.“ ausschließt. oder "...". Daher verhindert der Vergleich realer Pfade effektiv, dass Angreifer mithilfe solcher Zeichen Schwachstellen bei der Durchquerung ausnutzen.
Das obige ist der detaillierte Inhalt vonWie können PHP-Entwickler Schwachstellen beim Directory Traversal wirksam verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!