AST 解析安全网 · AST sandboxing
拦危险代码的两种常见做法都有问题:
os.system、eval 这些字符串。但 __import__("os").system(...)、getattr(os,"sys"+"tem") 一绕就过——正则不懂语法,只懂字符串。AST 解析是中间路线:把代码 parse 成语法树,遍历每个节点,检查 Import/Call/Attribute 是不是在白名单里。懂语法所以绕不过,不起容器所以快。smolagents 的 CodeAgent 就靠这个让 Agent 写代码又不爆炸。
选一段代码,点"扫描 AST",看沙箱拦截哪些、放行哪些。
AST 沙箱的核心是白名单,不是黑名单。默认所有 import/call 都拦,只放行你显式允许的:
__import__、__builtins__、__class__ 这类逃逸入口,一律拦。白名单要按你的场景配:数据分析 Agent 放 pandas+numpy,不放网络;爬虫 Agent 放 requests,不放文件写入。最小白名单 = 最大安全,每多放一个模块就多一个攻击面。
__import__、__builtins__、__class__ 一律拦。