2016-12-11 7 views
0

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だと私はめぐり逢えたらよ:)

+0

ありがとう@Keatinge、htmlspecialcharsは、スクリプトエンジンで処理されていない文字列をそのまま表示する必要のあるテキストフィールドではなく、ページ上のテキストをレンダリングするときに使用しました。それは理由ですは前に実行されませんでした。テキストフィールドにhtmlspecialcharsを付けて試してみましたが、それは実行されませんでした。 –

答えて

0

私は、テキストフィールド内のデータがあると表示され、必要最小限または無XSSは

をチェックされていない、印象の下にありました

あなたの印象は間違っていました。 XSSでは、HTML文書に入力されたすべてのユーザーを考慮する必要があります。それはどちらかでなければなりません:

  • は、信頼できるソースから本当に良いホワイトリストフィルタ
  • を通過
  • をエスケープ(および悪意がないこと、および誤って危険な何かを記述することなく、コードを書くために、信頼できることを意味し彼らが理解していないコードをコピー/ペーストしないように)。

文字"/>はないテキスト・フィールド内で、ページ上のテキストとしてレンダリングされ、テキストフィールドの後に来ます。何が変わったの?

"文字を追加しました。 "は属性値を終了します。

次に、>を追加しました。タグの内部ではあるが、属性値の外側では>がタグを終了します。

元の文書(つまり、ユーザー入力の一部ではないもの)にあった(つまり、ユーザー入力の">がそれを行ったため)閉じる属性とタグがなくなり、テキストとしてレンダリングされます。

+0

ありがとう、クエンティン!私は今眠ることができます:) –