信用できないPythonコードを実行する話

2023/06/17 13:55

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

信用できないスクリプトをプラグイン的に実行したい場合にどうすると良いのか

使ってほしくない関数を消してしまう

例えば環境変数を 簡単 に参照するのを防止しようとos.environを安直に消してしまう。

  # untrusted_script.py
  import os

  def execute():
      print(os.environ.get('HOME'))
  # main.py
  import os
  from importlib import import_module

  def run(name):
    m = import_module(name)
    m.execute()

  if __name__ == '__main__':
    del os.environ
    run("untrusted_script")

__builtins__で制御してしまう

__builtins__を空っぽにしてしまえば import さえも呼べない

  exec(code, {"__builtins__": {}}, {})

astと格闘したり、そもそも使えるものを制限したりする

pypi safe eval で検索すると頑張っているプロジェクトがいろいろ出てくる。

RestrictedPython を使って構築していくのも良さそう。 RestrictedPython is not a sandbox system or a secured environment, but it helps to define a trusted environment and execute untrusted code inside of it. とのこと。

Prev Entry

Next Entry