javascript の文字列リテラル間にダッシュを使用することで、XSS 攻撃を行うことができることに気付きました。
すなわち:
var foo = 'bar'-alert(1)-'baz';
//this will display the alert
私の質問は、そこで js インタープリターが何をしているのかということです。そのようなダッシュを使用するとはどういう意味ですか? 私はそれが単なる算術演算子だと思いました。
- - - アップデート - - -
申し訳ありませんが、xss 攻撃の実際の状況を説明していませんでした:
同意します。alert(1) はそれほど有害ではないようです。しかし実際には、 Burp Suiteで作成されたセキュリティ スキャンから取得した実際の例 です。ホスティング業者は私を悩ませていますが、誤検知の脆弱性と見なすことをお勧めします.
とにかく、redirecciónにクエリ文字列パラメーターを使用しています:
http://mysite.com/foo.php?returnto=bar.php
それもjavascriptで作られています:
echo '<script>alert("bye!");window.location="'.escapeXSS($_REQUEST['returnto']).'";</script>';
攻撃者は、リダイレクトする前に実行するために、そこに匿名関数を挿入する可能性があります。
http://mysite.com/foo.php?returnto=bar.php'-function(){/* do something */}()-'
結果は次のようになります。
<script>alert("bye!");windows.location='bar.php'-function(){/* do something */}()-'';</script>
実際、関数が実行されます(phpエスケープ関数の品質に依存します)。