B-Con が述べたように、攻撃者はコンピュータの前に座っている人ではないeval()
ため、現在のユーザーのセッションを何らかの方法で悪用するために、悪意のあるコードをサイトに渡す手段として、スクリプトに既に含まれているものを使用している可能性があります (たとえば、次のユーザー悪意のあるリンク)。
サニタイズされていない値に対して実行されると危険であり、 DOM ベースの XSS脆弱性eval()
につながる可能性があります。
たとえば、HTML で次のコードを検討してください (やや不自然ですが、問題を示していることを願っています)。
<script>
eval('alert("Your query string was ' + unescape(document.location.search) + '");');
</script>
クエリ文字列が の?foo
場合、次のようなアラート ダイアログが表示されます。Your query string was ?foo
しかし、このコードでユーザーができることは、ユーザーを自分のサイトから などの URL にリダイレクトすることですhttp://www.example.com/page.htm?hello%22);alert(document.cookie+%22
。ここで、www.example.com はあなたの Web サイトです。
これにより、によって実行されるコードが変更されeval()
ます
alert("Your query string was hello");
alert(document.cookie+"");
(わかりやすくするために私が追加した新しい行)。現在、これは現在の Cookie 値を表示するよりも悪意のあることを行っている可能性があります。必要なコードは、攻撃者のリンクによってエンコードされた形式でクエリ文字列に渡されるだけだからです。たとえば、リソース要求で攻撃者のドメインに Cookie を送信し、認証セッションをハイジャックできるようにする可能性があります。
eval()
これは、ここに示すクエリ文字列だけでなく、サニタイズされておらず、 で直接実行されるユーザー/外部入力からのすべての値に適用されます。