SuperAPI AI 工具集

python-kwargs-setattr-security

安全与审计

查看项目

更新于 10-16 00:31

技能介绍

用途:在审查或修复 Python 代码时,避免用 hasattr(obj, k) / setattr(obj, k, v) 直接处理用户可控的 kwargs 来配置 C++ 扩展对象(如 SessionOptions、RunOptions)。hasattr 检查不是安全防护,它对所有暴露属性都返回 True,包括危险属性。

主要能力:提供显式白名单修复模式。在模块级定义 frozenset 安全属性名(如 _ALLOWED_SESSION_OPTIONS),方法内遍历 kwargs:命中白名单则 setattr;属性存在但被阻止则抛 RuntimeError;未知键静默忽略。

关键规则:hasattr 使用已有实例(hasattr(options, k)),不要用 hasattr(ClassName(), k) 以免每次迭代创建临时 C++ 对象;API 误用错误用 RuntimeError(ORT 约定,非 ValueError);当 kwargs 同时转发给两条路径时,静默忽略是合理的——run_model() 把同一 kwargs 传给 prepare()(校验 SessionOptions)和 rep.run()(校验 RunOptions),SessionOptions 不认识的 RunOptions 参数由 prepare() 静默忽略,最终由 rep.run() 校验;仅当属性存在于目标对象但被阻止时才抛 RuntimeError。常量命名 ALLOWED<CLASSNAME>,全大写,Google 风格;模块级常量不加类型注解(ORT Python 约定)。

危险属性(永不加入白名单):optimized_model_filepath 会触发 Model::Save() 覆盖任意文件;profile_file_prefix 配合 enable_profiling 会把性能分析 JSON 写到任意路径;register_custom_ops_library 会加载任意共享库(是方法而非属性)。

涉及文件:onnxruntime/python/backend/backend.py 中的 _ALLOWED_SESSION_OPTIONS;onnxruntime/python/backend/backend_rep.py 中的 _ALLOWED_RUN_OPTIONS;测试位于 onnxruntime/test/python/onnxruntime_test_python_backend.py 的 TestBackendKwargsAllowlist。

限制:资料未提供完整白名单内容、具体版本要求或安装命令,实际使用时需按上述规则自行审查并维护白名单。