61992


evalをwebのフォームなどで使うとよくないと聞いたのですがなぜでしょうか？

よくない理由を書いている人が掲示板にいました。

> If you apply eval() to a string that's given by a user (e.g. in a web form),
> you might get unintended behaviour which might get you hacked directly or
> give malicious users insight to your back-end through error messages.
>
> 日本語訳（google翻訳）  
>
> ユーザー（Webフォームなど）によって指定された文字列にeval（）を適用すると、意図しない動作が発生し、直接ハッキングされるか、エラーメッセージを通じて悪意のあるユーザーにバックエンドの洞察を与える可能性があります。

なぜハッキングされたり、悪意あるユーザーの洞察をエラーメッセージを通して与えられるのでしょうか？


CC BY-SA 4.0
2020-01-06T01:52:26.827
61989
2020-01-06T06:04:13.343
2020-06-17T08:14:45.997
-1
36091
question
python python3 security
eval関数をwebフォームなどで使うとなぜ危険なのか？


eval 関数で 任意のコマンドが実行できるからです。

[code]

    >>> eval("print('hello')", {})
    hello
    
    >>> eval("__import__('os').system('uname -a')", {})
    Linux C077 4.4.0-18362-Microsoft #476-Microsoft Fri Nov 01 16:53:00 PST 2019 x86_64 x86_64 x86_64 GNU/Linux
    0
    
[/code]


CC BY-SA 4.0
2020-01-06T02:15:14.597
61990
2020-01-06T02:21:05.177
2020-01-06T02:21:05.177
5008
5008
61989
answer


(Python に限らず) `eval`
では任意のシステムコマンドを実行できてしまうので、Webフォームなどと組み合わせて使ってしまうと、例えば単に「年齢(数字)を入力してください」としていたところに、悪意のあるユーザーは「パスワードファイルの表示」や「ファイルの削除」を試みるコマンド文字列を入力してくるケースが想定されます。

参考:  
[eval #セキュリティ上のリスク
(Wikipedia)](https://ja.wikipedia.org/wiki/Eval#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E4%B8%8A%E3%81%AE%E3%83%AA%E3%82%B9%E3%82%AF)

> これを防ぐためには、evalされる文字列はすべてエスケープしたり、潜在的に危険な機能を利用できないようにして実行するなどの対策が必要となる。


CC BY-SA 4.0
2020-01-06T02:28:52.940
61992
2020-01-06T02:28:52.940
2020-06-17T08:14:45.997
-1
3060
61989
answer