1

python3 pickle モジュールのドキュメントには、次のように書かれています。

「 pickle モジュールは、誤った、または悪意を持って作成されたデータに対して安全であることを意図していません。信頼されていない、または認証されていないソースから受け取ったデータを unpickle しないでください。」

信頼できないソースからのデータを unpickle するリスクは何ですか? 信頼できないデータの unpickle 自体は危険ですか? それとも、ピクルス化されていないオブジェクトを使用するだけで危険ですか? では、信頼できないデータを unpickle し、(結果のオブジェクトで何かを行う前に) それが保存オブジェクトであるかどうかを証明しても安全ですか?

4

3 に答える 3

2

pickle を unpickle すると、任意のコードを実行することになります。攻撃者は、unpickle 中にシステム コマンドを実行する pickle を作成できます。

このトピックに関する優れたブログ投稿の例を次に示します。

これは、ピクルが安全でないことを明確に示しています。多くの人は、これは、期待したもの以外のクラスをロードでき、関数を実行するようにだまされる可能性があるためだと考えています。しかし、実際のセキュリティ リスクははるかに危険です。Unpickling は、マシン上で任意のコマンドを実行するために悪用される可能性があります!

于 2013-03-30T12:53:02.443 に答える
2

Pickle は、callable (通常はクラスですが、実際にはすべての callable) を検索し、固定の引数を指定してそれらを呼び出すことにより、オブジェクトを再作成します。これは、unpickling が任意の引数で任意のcallableを実行できることを意味します。関連するモジュールがまだインポートされていなくても、pickle は喜んでインポートします。たとえば、実行するのに数十文字しかかかりません。オブジェクトを取り戻す前に、あなたはめちゃくちゃです。os.system

于 2013-03-30T12:53:19.857 に答える
1

pickle 形式では、本格的な仮想マシンが使用されます。マシンに入力されたコードが攻撃者によって制御されている場合、オブジェクトのシリアル化 (任意の OS コマンドの実行など) をはるかに超えることができます。

議論については、Why Python Pickle is Insecureを参照してください。

于 2013-03-30T12:53:07.043 に答える