ホームページ > バックエンド開発 > Python チュートリアル > 信頼できない文字列で Python の「eval()」を使用するのはどの程度安全ですか?

信頼できない文字列で Python の「eval()」を使用するのはどの程度安全ですか?

Susan Sarandon
リリース: 2024-11-27 01:36:10
オリジナル
221 人が閲覧しました

How Secure Is Using Python's `eval()` with Untrusted Strings?

信頼できない文字列を使用した Python の eval() のセキュリティへの影響

eval() を使用して信頼できない Python 文字列を評価すると、いくつかのセキュリティ リスクが発生します。

1. eval(string, {"f": Foo()}, {})

これは安全ではありません。 Foo インスタンスを通じて、「os」や「sys」などの組み込みにアクセスでき、システムを侵害する可能性があります。

2. eval(string, {}, {})

これも安全ではありません。明示的に辞書を渡さなくても、「len」や「list」などの組み込みを使用して他の安全でない API にアクセスできます。

3.ビルトインの禁止

eval() コンテキストでのビルトインの存在を完全に阻止する簡単な方法はありません。 Python インタープリタへのパッチが必要です。

追加のリスク:

「[0] * 100000000」のような悪意のある文字列は、リソースの枯渇につながる可能性があります。任意の式を実行すると、ユーザー データとシステムのセキュリティが侵害される可能性があります。

代替アプローチ:

eval() を使用する代わりに、信頼できないデータを処理するための他の方法を検討してください。例:

  • 入力をサニタイズして有害な可能性のあるコードを削除します。
  • RestrictedExecutionEnvironment を使用してコード実行の範囲を制限します。
  • 安全なシリアル化形式を使用してデータを転送します。任意のコードの実行を許可しません。

以上が信頼できない文字列で Python の「eval()」を使用するのはどの程度安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート