1

通过 Semgrep(静态代码验证器)运行我的 python 代码时,我收到以下警告。请建议任何实际示例如何使用白名单来防止运行不受信任的代码或任何其他解决方案来避免此警告。我在网上搜索但找不到任何示例..

我在 import_module 的特定行下方收到警告

警告:importlib.import_module() 函数中不受信任的用户输入允许攻击者加载任意代码。避免 importlib.import_module() 中的动态值或使用白名单来防止运行不受信任的代码。

channel_module = import_module("src.main.core_prj.prj_" + config['subscription'].lower())
4

1 回答 1

1

触发规则可以在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命令行参数再次显示它们。

于 2021-10-27T13:04:07.173 回答