eval()
解決策として思いついたコードがいくつかある状況があります。eval()
これまで使用したことはありませんが、それが引き起こす可能性のある危険性について多くの情報に遭遇しました。そうは言っても、私はそれを使用することに非常に慎重です。
私の状況は、ユーザーからの入力があるということです:
datamap = input('Provide some data here: ')
datamap
辞書が必要な場所。検索してみたところ、eval()
これが解決できることがわかりました。データを使用する前に入力の型をチェックできるかもしれないし、それが有効なセキュリティ対策になるだろうと思いました。
datamap = eval(input('Provide some data here: ')
if not isinstance(datamap, dict):
return
ドキュメントを読みましたが、これが安全かどうかはまだわかりません。eval は、データが入力されるとすぐに評価するのでしょうか、それとも変数がdatamap
呼び出された後に評価するのでしょうか?
ast
モジュールだけが.literal_eval()
安全な選択肢なのでしょうか?
ベストアンサー1
datamap = eval(input('Provide some data here: '))
安全かどうか判断する前に実際にコードを評価することを意味します。関数が呼び出されるとすぐにコードを評価します。の危険性eval
。
ast.literal_eval
入力が有効な Python データ型でない場合は例外が発生するため、有効な Python データ型でない場合はコードは実行されません。
ast.literal_eval
必要なときにいつでも使用可能eval
通常、リテラル Python ステートメントを評価するべきではありません。