コードをコピーします コードは次のとおりです。
foo.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo
XSS インジェクション脆弱性です。理由は
にあります。echo $_SERVER['PHP_SELF'];
'PHP_SELF'<br><br>The filename of the currently executing script, relative to the document root. <br>For instance, $_SERVER['PHP_SELF'] in a script at the address <br>http://example.com/test.php/foo.bar would be /test.php/foo.bar. The __FILE__ <br>constant contains the full path and filename of the current (i.e. included) file.<br>If PHP is running as a command-line processor this variable contains the script <br>name since PHP 4.3.0. Previously it was not available.
$_COOKIE など、他にも同様の変数が多数あります (ユーザーが Cookie を「操作」したい場合、私たちにできることは何もありません)。解決策は簡単です。
strip_tags、htmlentities などの関数を使用してフィルタリングまたはエスケープします。
echo htmlentities($_SERVER['PHP_SELF']);
-- 分割 --
上記の例では、常に慎重なコーディング精神を維持する必要があります。 Chris Shiflett は、XSS を防ぐための 2 つの基本的なセキュリティのアイデアをブログで非常にわかりやすくまとめています。 上記を「
入力をフィルターし、出力をエスケープFilter input<br>Escape output
の記事をご参照ください。