如何让老虎机在测试中跳过 B101?

Mar*_*oma 7 python bandit-python

我正在使用 bandit 检查我的代码是否存在潜在的安全问题:

bandit -r git-repository/
Run Code Online (Sandbox Code Playgroud)

然而,bandit 发现的最常见的物品是B101。它由测试中的断言语句触发。我使用 pytest,所以这不是一个问题,而是一个很好的做法。我现在已经创建了一个.bandit文件

[bandit]
skips: B101
Run Code Online (Sandbox Code Playgroud)

但这也跳过了很多其他代码。这个问题有解决方案吗?

小智 18

根据这个评论

当使用--recursive整个路径时,会fnmatch针对 ed 进行编辑 glob_list,因此--exclude_dir表达式test_*.py不匹配并排除子目录中的 (py) 测试文件,因为这 */test_*.py是需要的。

以下配置应该可以解决您的问题:

assert_used:
  skips: ["*/test_*.py", "*/test_*.py"]
Run Code Online (Sandbox Code Playgroud)


小智 17

只是想添加到上面的答案并提及 toml 相当于跳过assert_used特定文件:

[tool.bandit.assert_used]
skips = ['*_test.py', '*/test_*.py']
Run Code Online (Sandbox Code Playgroud)


ang*_*nio 9

一个可能的解决方案是bandit完全跳过测试。假设您的代码位于src子文件夹中,请运行

bandit --configfile bandit.yaml --recursive src
Run Code Online (Sandbox Code Playgroud)

bandit.yaml在项目的根目录中包含以下内容

# Do not check paths including `/tests/`:
# they use `assert`, leading to B101 false positives.
exclude_dirs:
    - '/tests/'
Run Code Online (Sandbox Code Playgroud)

很多相关的 问题和拉取请求

更新:我更喜欢迭戈的解决方案