10

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

bandit -r git-repository/

但是,bandit 发现的最常见的项目是B101。它由测试中的断言语句触发。我使用 pytest,所以这不是一个问题,而是一个好习惯。我现在创建了一个.bandit文件

[bandit]
skips: B101

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

4

4 回答 4

4

我使用的解决方案是告诉bandit完全跳过测试:

bandit --configfile bandit.yaml

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

# Do not check paths including `/tests/`:
# they use `assert`, leading to B101 false positives.
exclude_dirs:
    - '/tests/'

一堆相关问题拉取请求

于 2020-09-28T13:47:57.523 回答
3

基于此评论

当使用--recursive整个路径时fnmatch,对 glob_list,因此--exclude_dir表达式test_*.py不匹配并排除子目录中的 (py)test 文件,因为这 */test_*.py是必需的。

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

assert_used:
  skips: ["*/test_*.py", "*/test_*.py"]
于 2021-11-16T19:53:00.920 回答
2

根据文档,您的配置应该看起来像 skips: ['B101'],而不是skips: B101(您拥有的)。

编辑:
好的,所以如果我理解正确,你想跳过B101你的tests文件夹。我不知道有什么方法可以指定这一点,但我可以想到一种 hack - 只需运行 bandit 两次 - 一次 ignoring tests,一次仅在测试 skipping 上B101。我知道,这不是最优雅的方式,但它应该可以解决您的问题。

于 2020-09-18T18:58:02.673 回答
1

您可以配置跳过此检查的文件。当您在测试用例中使用断言语句时,这通常很有用。

bandit --configfile bandit.yaml

在项目的根目录中使用以下 bandit.yaml

assert_used:
  skips: ['*_test.py', 'test_*.py']

链接到原始文档

于 2021-03-25T07:51:58.860 回答