1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

evalは使わない

Posted at

eval() を使わないでください!
直接的な eval() はいくつもの問題を引き起こします。

eval() は呼び出し元の権限で渡されたコードを実行します。悪意のある第三者に影響を受ける可能性のある文字列で eval() を実行すると、そのウェブページや拡張機能の権限において、ユーザーのマシン上で悪意のあるコードを実行してしまう可能性があります。さらに重要なことに、サードパーティのコードが eval() が(直接的な eval であれば)呼び出されたスコープを見ることができるため、攻撃者がローカル変数を読み取ったり変更したりすることができてしまいます。

  • 悪意のあるコードを自分のパソコンの権限で実行してしまい悪さをする
  • サードパーティとは?

  • サードパーティのコードとは?

現代の JavaScript では多くの構造が JS エンジンによって最適化されているため、eval() は他の方法よりも低速です。
現代の JavaScript インタープリターは JavaScript を機械語に変換します。これは、変数の名前の概念がすべて消滅することを意味します。したがって、eval() を使用すると、ブラウザーは長い高価な変数名検索を実行して、変数が機械語のどこに存在しているかを把握し、その値を設定します。さらに、eval() が変数の型の変更など、その変数に新しい変数をもたらす可能性もあり、生成されたすべての機械語を再評価して補正させられる可能性があります。
スコープが eval() によって推移的に依存されている場合、ミニファイヤーはミニ化をあきらめます。そうしないと eval() は実行時に正しい変数を読み込むことができないからです。
eval() や関連のメソッドを使用することで、最適化したり、完全に避けることができる用途はたくさんあります。

  • スコープとは?

  • インタープリターとは

感想

任意のスクリプトを実行できるから危ないらしいがどういう風に書き変えるのか?
調べても難しかった。
evalは使わないようにしたい

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?