我得到下面的警告,而通过Semgrep(静态代码验证器)运行我的python代码。请提供如何使用白名单来防止运行不受信任的代码的任何实际示例或任何其他解决方案来避免此警告。我在网上搜索了,但是没有找到任何例子。
我在import_module
的特别行下面得到警告警告:importlib.import_module()函数中不受信任的用户输入允许攻击者加载任意代码。避免在importlib.import_module()中使用动态值,或者使用白名单来防止运行不受信任的代码。
channel_module = import_module("src.main.core_prj.prj_" + config['subscription'].lower())
可在https://semgrep.dev/r?q=Untrusted+user+input+in+importlib.import_module找到触发的规则。单击规则将展开以显示定义,该定义显示它允许importlib.import_module("..")
,并在使用变量时触发警告。
规则提到它是为了防止CWE-706:使用不正确解析的名称或引用,这是相当广泛的。
这在示例代码中是不相关的,它在用户定义的配置字符串之前有一个字符串前缀,因此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
命令行参数再次显示它们。