teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

eval\(\)の危険性について追記

2017/09/03 07:55

投稿

tsuemura
tsuemura

スコア663

answer CHANGED
@@ -1,7 +1,21 @@
1
+ 追記:
2
+ コメントでご指摘頂きましたが、`eval()`は脆弱性につながる恐れがありますので、他の手段がある場合は使わないほうが良いようです。PHPには`call_user_func()`という専用関数が、Pythonならば`globals()`または`locals()`で定義済みの関数・変数のディクショナリを取得することで文字列での呼び出しができます。
3
+
4
+ [PHP:call_user_func - Manual](http://php.net/manual/ja/function.call-user-func.php)
5
+ [2. 組み込み関数 ー Python 3.6.1 ドキュメント](https://docs.python.jp/3/library/functions.html)
6
+
7
+ 参考までに、[PHPの公式ドキュメント](http://php.net/manual/ja/function.eval.php)には下記のように記載されています。
8
+
9
+ > 警告
10
+ eval() は非常に危険な言語構造です。 というのも、任意の PHP コードを実行できてしまうからです。 これを使うことはおすすめしません。 いろいろ検討した結果どうしても使わざるを得なくなった場合は、細心の注意を払って使いましょう。 ユーザーから受け取ったデータをそのまま渡してはいけません。 渡す前に、適切な検証が必要です。
11
+
12
+
13
+ ---
14
+
1
15
  肝心のGolangについては門外漢ですので、pythonと、聞かれてないですがPHPの例です。
2
16
  eval()を使えばなんでもできます(是非はともかくとして)。
3
17
 
4
- ```python
18
+ ```pyth
5
19
  def call1(): print('spam')
6
20
  def call2(): print('ham')
7
21
  def call3(): print('sausage')