当我通过Semgrep(静态代码验证器)运行我的python代码时,我得到了下面的警告。请建议任何实际的例子,如何使用白名单来防止运行不可信的代码或任何其他解决方案,以避免这种警告。我在网上搜索,但没有找到任何例子。
我在import_module的粒子线以下收到警告
警告: importlib.import_module()函数中不受信任的用户输入允许攻击者在importlib.import_module()中加载任意code.Avoid动态值或使用白名单来阻止运行不受信任的代码。
channel_module = import_module("src.main.core_prj.prj_" + config['subscription'].lower())发布于 2021-10-27 13:04:07
触发的规则可以在https://semgrep.dev/r?q=Untrusted+user+input+in+importlib.import_module上找到。单击规则将展开以显示定义,其中显示它允许importlib.import_module("..")并在使用变量时触发警告。
该规则提到它打算防止CWE-706: Use of Incorrectly-Resolved Name or Reference,这是相当广泛的。
这在示例代码中并不相关,因为在用户定义的配置字符串之前有一个字符串前缀,所以import_module("src.main.core_prj.prj_" + config['subscription'].lower())不可能加载目标控制范围(src.main.core_prj...)之外的模块(资源)。
要指示semgrep忽略该行,可附加一个内联注释nosem,如下面的Python所示
>>> channel_module = importlib.import_module("src.main.core_prj.prj_" + config['subscription'].lower()) # nosem在https://semgrep.dev/s/KXZL的semgrep规则游乐场中测试以上内容
在添加这些禁用行的内联注释或行上的特定规则之后,可以使用--strict命令行参数再次显示它们。
https://stackoverflow.com/questions/69029885
复制相似问题