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

2020年11月17日

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

t f B! P L
プログラミング言語を制御するプログラムを作っている、下駄です。 これまで仕事でも、個人プログラムでも、必要に応じて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と掛けまして・・・ ムカつく上司とときます。 そのココロは・・・ ・・・ 「えばるなよ」 おあとがよろしいようで・・・

このブログを検索

プロフィール

自分の写真
町田市, 東京都, Japan
プログラミングとサーバーを心の底から楽しむクリエーターです。 経営者であり、開発者でもありますが、得意としているのは、アイデア創出です。

ブログ アーカイブ

QooQ