0

現在のコードで evals を使用していたため、この質問を見てしまいました。

JavaScript の eval 関数を使用するのが悪い考えなのはなぜですか?

ブラウザーに JavaScript コードがある場合は、JavaScript を HTML の一部として、または別のファイルとしてダウンロードします。ソース コードは、誰でも閲覧および変更できるように用意されています。eval() を介したインジェクション攻撃が、ソースコードをハッキングして、攻撃者が望むように変更するよりも悪いとは思いません。

誰かが私が欠けているものを説明できますか? または、ソースコードを変更することによって (簡単に) 達成できなかった eval が危険なシナリオ。

4

3 に答える 3

0

評価しようとしている文字列が信頼されていて安全であると確信している状況でも、常に使用する価値があるとは限りませんeval

たとえば、Web ページを Mozilla Firefox OS でアプリケーションとして利用できるようにしたい場合、evalそれは禁止されているため、機能しなくなります。詳しくはこちらのページをご覧ください。

同様に、 の単純な使用は、このドキュメントevalに従って、Google Chrome 拡張機能では機能しません。

また、評価したい文字列の安全性について 100% 肯定的でない場合は、eval完全に回避する必要があります。

于 2013-09-02T13:04:14.447 に答える
0

リンクした質問のポテトの例から始めましょう。

eval('document.' + potato + '.style.color = "red"');

potatoユーザーに「body」または「forms[0]」を選択するように求めるときに、サイトにという入力フィールドがあり、この入力と上記のコードを使用して、ボディまたは最初のフォームの色を変更するとします。他のユーザーに配信するページ(たとえば、DB を使用)。

ここで、中程度の悪意のあるユーザーがこれを中に入れたとしますpotato:

"title;alert('test');({style:{color:1}})"

次に、アラートが発生します。しかし、ページの機密コンテンツを提供するサーバーへの ajax 呼び出しのように、これはさらに悪いことになる可能性があります。

ご覧のとおり、これは SQL インジェクションとほぼ同じ種類の問題です。

もちろん、これを行うには非常に愚かである必要があります。つまり、ユーザーが提供した文字列を使用しevaled、機密コンテンツを含むページの他のコンピューターの文字列にそれらを配置します。だからこそ、私はそれ"eval is evil"がほとんど迷惑な FUD であると主張します。

しかし、もう 1 つの重要な点は、それevalは遅く、ほとんどの場合役に立たないということです。

Eval は悪いことではありませんが、一般的に悪い習慣です。

于 2013-09-02T13:05:27.520 に答える