xss1.phpという名前のこのPHPページを考慮してください。あなたは私の謎を理解するために、あなたが持っているLAMPサーバーやVMにアップロードすることができます。テキストフィールドのXSS - PHPの例
<?php
ob_start();
session_start();
$searchValue = "";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$searchValue = trim($_POST["txtSearch"]);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>XSS: Sample 1</title>
</head>
<body>
<form name="xssForm" method="POST" action="xss1.php">
<input type="text" id="txtSearch" name="txtSearch" maxlength="128" value="<?php print($searchValue); ?>"/>
<input type="Submit" id="btnSubmit" value="Submit"/>
</form>
</body>
</html>
<?php
ob_end_flush();
?>
私は印象を受けていましたが、テキストフィールドのデータはそのまま表示され、最小限のXSSチェックが必要です。このテキストフィールドでは、もし私がスティックに入れば<スクリプト>アラート(1); </script >フォームがポストされると、値はXSSの実行または注入なしでテキストフィールドに再び表示されます。 Firefox 50.0.2を実行しています。
今、私のMac OS X上、私は" > <スクリプトで>アラートを固執する場合(1); < /スクリプト>、XSSがあり、その中に1のJavascriptアラートポップアウトが表示されます。文字"/>は、テキストフィールドの後に来るもので、テキストフィールド内ではなくページ上にテキストとして表示されます。何が変わったの?私は少し当惑だと、おそらくしかしサファリでhttps://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
で、XSSフィルタ回避チートシート上の答えを見つけようとして次の時間を過ごすことになり、私はJavascriptのアラートポップアウトが表示されませんが、"/>は、テキストフィールドの外側、ページの直後に書き込まれます。
それは2:01のPTだと私はめぐり逢えたらよ:)
ありがとう@Keatinge、htmlspecialcharsは、スクリプトエンジンで処理されていない文字列をそのまま表示する必要のあるテキストフィールドではなく、ページ上のテキストをレンダリングするときに使用しました。それは理由ですは前に実行されませんでした。テキストフィールドにhtmlspecialcharsを付けて試してみましたが、それは実行されませんでした。 –