1

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エスケープ関数の品質に依存します)。

4

2 に答える 2

6

インタプリタは、各サブ式を単純にキャストして、数式を作成しようとします。

それ以外の:

var foo = 1 - 2 - 1;

最終的に次の式になります。

var foo = NaN - NaN - NaN;

それが理由fooですNaN

于 2011-05-03T21:51:20.370 に答える
0

が実行されるのalert()は、文字列にダッシュが含まれているためではなく、 の後barに文字列を閉じて、 の戻り値を「減算」し、そこからalert()string を減算したためbazです。したがって、関数alert()は常に呼び出されます。発生させたくない場合は、文字列を閉じてから再度開く必要はありません。

var foo = 'bar-alert(1)-baz'; 

実際、それがどのようにして XSS 攻撃につながるかはわかりません。コードに渡される文字列は、実際には上記のような文字列になります。

于 2011-05-03T21:48:50.357 に答える