Javascriptでevalを使いたい時はFunctionを使えばいい

2020年11月17日

Javascript テクノロジー プログラミング

eyecatch プログラミング言語を制御するプログラムを作っている、下駄です。 これまで仕事でも、個人プログラムでも、必要に応じてeval関数を使ってきましたが、やっぱりeval関数は使うべきではないことは十分に承知しています。 リファレンスサイトには、Function関数を使うと良いという事が書かれていて、どのようにすればいいかを、少し調査してみました。 MDN web docs 「eval() を使わないでください!」

eval関数を使いたい場面

そもそも、eval関数を知らないという人の為に簡単に説明すると、eval関数というのは、プログラム文字列を、stringではなく、プログラムとして実行することができる、安直に便利な関数なのですね。 どういった時に使うかと言うと、例えば、数字を2つ足して答えを出すプログラムを作る時は、functionに引数を2つ付けて、それを足した値をreturnすれば、いいのですが、ユーザーに、好きな数式を書いてもらいその答えを求めたい時、電卓などを作った時に、数字と演算子を文字列にして、そのまま答えを求めたいというような場合ですね。 この場合は、evalにその文字列を入れるだけで簡単に、結果を得られるので、そうした時に使い勝ちです。

何故eval関数が危険と言われるのか?

しかし、eval関数は何故とても危険という風に言われるかというと、数式の答えを求めるだけでなく、プログラムとして、何でも実行できてしまうという事が問題になります。 要するに、自由なプログラムをwebサイトで実行させてしまうと、何でもできてしまうjavascriptであれば、そのサイトをハッキングすることも、他のサイトにアクセスする踏み台にされることも、サイト内の色々なデータを覗き見られることも、理解している人には比較的簡単にできてしまいます。 悪意のあるユーザーなどいないと言う場合は、問題なく使ってもらってもいいのですが、セキュリティって紳士協定では成り立たないので、できれば、そうした自体を避けるために、evalは利用しないという方が賢明です。

Function関数のメリット

では、一体どうすればいいかというと、evalと似たような関数に「Function」関数があります。 関数定義をする「funciton」ではなく、プログラムを引数で与えて、その結果を得ることができる「window.Function()」という関数です。 この関数のメリットは、スコープ外の値を覗き見ることができない上、結果を変数に代入することもでき、どうやらevalを使うよりもセキュアに実行できるようです。 ただし、本当に悪意のあるユーザーであれば、この関数であっても、ハッキング行為を行うことは可能になるので、書き込む内容には、ある程度の制限を付ける必要はあるようですね。 あと、嬉しい点としては、evalよりもFunctionを使ったほうが、処理速度が少しだけ早くなるようです。 サーバー負荷になるわけではないうですが、少しでも負荷を下げるという事は、プログラミングの本質でもあるので、こうしたメリットを活用しない手はありませんね。

eval謎掛け

evalと掛けまして・・・ ムカつく上司とときます。 そのココロは・・・ ・・・ 「えばるなよ」 おあとがよろしいようで・・・

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ