ホームページ  >  記事  >  バックエンド開発  >  PHP を信頼しない_SELF セキュリティ問題_PHP チュートリアル

PHP を信頼しない_SELF セキュリティ問題_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:44:49893ブラウズ

コードをコピーします コードは次のとおりです:


if (isset($_REQUEST['submitted']) && $_REQUEST['submitted '] = = '1') {
echo "フォームが送信されました!"
}

;
< ;/html>




コードは正確であるように見えますが、隠れた危険があります。 foo.php として保存して、PHP 環境で使用しましょう
foo.php/%22%3E%3Cscript%3Ealert('xss')%3C/script%3E%3Cfoo
アクセスすると、JavaScript アラートがポップアップ表示されます。これは明らかに、別の
XSS インジェクション脆弱性 です。理由は

echo $_SERVER['PHP_SELF'];
にあります このステートメントは、フィルターされていない値を直接出力します。ソースをたどるために、PHP マニュアルの説明を見てみましょう

'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. 
その理由は非常に明らかです。$_SERVER['PHP_SELF'] はサーバーによって提供される環境変数であるように「見えます」が、実際には $_POST や $_GET と同様であり、ユーザーが変更できることがわかります。 $_COOKIE など、他にも同様の変数がたくさんあります (ユーザーが Cookie を「遊びたい」場合は、私たちにできることは何もありません)。解決策は簡単です。

strip_tags

htmlentities

、その他の同様の関数を使用してフィルタリングまたはエスケープします。

りー --分割--

上記の例では、常に慎重なコーディング精神を維持する必要があります。 Chris Shiflett は、XSS を防ぐための 2 つの基本的なセキュリティのアイデアをブログで非常にわかりやすくまとめています 上記を「フィルター入力、エスケープ出力

」と訳しました。詳しい内容については、ここでは割愛しますが、彼のブログの

こちらの記事をご参照ください。

http://www.bkjia.com/PHPjc/320512.htmlwww.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/320512.html技術記事次のようにコードをコピーします。 html body ?php if (isset($_REQUEST['submitted']) $_REQUEST['submitted'] == '1') { echo "フォームが送信されました!" } ? php echo $_SERVER['PHP_SELF']...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。