※ 商品リンクから購入されると少額の報酬が発生することがあります。
信用できないスクリプトをプラグイン的に実行したい場合にどうすると良いのか
使ってほしくない関数を消してしまう
例えば環境変数を 簡単 に参照するのを防止しようと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. とのこと。