B-Conが述べたように、攻撃者はコンピュータに座っているものではないため、現在のユーザーのセッションを悪用するためにサイトに悪質なコードを渡す手段としてスクリプト内に既にeval()
を使用している可能性があります。 (例えば悪意のあるリンクをたどっているユーザーなど)。
eval()
の危険性は、unsanitised値で実行され、DOM Based XSSの脆弱性が発生する可能性があります。
Your query string was ?foo
しかし、どのようなクエリ文字列は、あなたは、単に次のように述べて、警告ダイアログが表示?foo
ある場合
今
<script>
eval('alert("Your query string was ' + unescape(document.location.search) + '");');
</script>
(むしろ不自然、それは私が願って問題を示しています)、あなたのHTMLに次のコードを検討このコードでは、ユーザーが自分のサイトからhttp://www.example.com/page.htm?hello%22);alert(document.cookie+%22
などのURLにユーザーをリダイレクトすることができます.www.example.comはあなたのウェブサイトです。
これは
alert("Your query string was hello");
alert(document.cookie+"");
(新しい行を明確にするために私が追加される)にeval()
によって実行されるコードを変更します。これは、現在のクッキー値を表示するより悪意のあるものを実行する可能性があります。必要なコードが、攻撃者のリンクによって暗号化された形式でクエリ文字列に渡されるためです。たとえば、リソースリクエストで攻撃者のドメインにCookieを送信して、認証セッションをハイジャックすることができます。
これは、照会文字列だけでなく、eval()
で直接未実行で実行されたユーザー/外部入力の値に適用されます。
これは「共通のコンセンサス」ではありません。多くの経験豊富な開発者はFUDによって 'eval'について悩まされています。 * "eval is evil" *はおそらく今日経験豊富なコーダーによって言われることはありません。あなたがばかだと危険です。しかし、通常は遅くて醜いので、コードを進化させるのは難しいです。 –
今、私はこの質問が良い答えを受け取る方法を見ていません... –