2011-01-27 27 views
14

可能性の重複:私は、人々は、任意のユーザーの入力コードで実行したときにevalが安全ではないと主張読み
Why exactly is eval evil?なぜevalはjavascriptで安全ではありませんか?

。私はファイルシステムにアクセスするサーバー上で実行される他の言語でこれを理解しています。しかし、ブラウザでコードを実行するとどうしてこの問題が起こりますか?結局のところ、Firebugを起動して、あなたが望む任意のスクリプトを書き込むことはできませんか?だから、evalはどう違うの?

+1

'evalのを(実行するために、それは安全ではないとは思いません'あなたが慎重でない場合XSSの攻撃ベクトルかもしれない – PaoloVictor

+1

もう少し説明してください –

+0

http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evilとhttp: /stackoverflow.com/questions/1826859/is-there-ever-a-good-reason-to-use-eval – Phrogz

答えて

19

evalの危険性は、aliceがbobのブラウザからevalに書き込んだスクリプトを提供しているときには、その醜い頭を元に戻します。

ボブがあなたのページに自分のパスワードを入力すると、アリスはユーザー入力にキーロガーを書いて、ボブが提出するスクリプトにエンコードするデータをアリスに提出するようにアレンジします(eval)。これは、@ Hunter2がコメントに示唆しているように、XSS攻撃です。

あなたが他の人に提供されていない場合、あなたはそれを想定した中で正しいことは放火犯

2

を発射に相当します)は、最も被害妄想がeval = null;

+4

これは役に立ちません。 'new((function(){})。コンストラクタ)( 'alert("信頼できないコード ")))()'を実行することで、 'eval'の権限のほとんどを得ることができます。馬を見て、グローバルはありません! –

+0

'window'を私の上に置いてくれましたが、私は興味があります:もしあなたがネイティブの' window'を参照するのをオーバーライドすれば、そうでなければそれを参照できる方法はありますか? –

+4

'function myEval(str){return(new Function(str))()}'は簡単で、私にとってはうまくいきます:D – tobyodavies

関連する問題