【问题标题】:How can I make bandit skip B101 within tests?如何让强盗在测试中跳过 B101?
【发布时间】:2020-09-10 11:53:45
【问题描述】:

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

bandit -r git-repository/

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

创建了一个.bandit 文件
[bandit]
skips: B101

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

【问题讨论】:

    标签: python bandit-python


    【解决方案1】:

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

    bandit --configfile bandit.yaml --recursive src
    

    在项目根目录下bandit.yaml

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

    relatedissuespull requests 中有一个bunch

    更新:我更喜欢Diego's solution

    【讨论】:

      【解决方案2】:

      基于this comment

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

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

      assert_used:
        skips: ["*/test_*.py", "*/test_*.py"]
      

      【讨论】:

        【解决方案3】:

        基于documentation,您的配置应如下所示 skips: ['B101'],而不是 skips: B101(你有)。

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

        【讨论】:

        • 这正是我在我写的问题中所遇到的,这不是我想要的
        • skips: ['B101']skips: B101 不是一回事。你确定你的配置中有正确的东西吗?
        • @ThrowAwayAccount 是的,我是。如问题中所述,我不是要求跳过所有 B101 检查的解决方案。我要求仅针对给定目录中的代码跳过 B101。
        • @MartinThoma 您的问题并不清楚,所以我在回答其他问题。那么,你想只在 /test 目录中跳过 B101 吗?
        • 是的,我只想跳过测试目录中的 B101。在其他目录中,我还想拥有这个。
        【解决方案4】:

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

        bandit --configfile bandit.yaml
        

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

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

        Link 原文档

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-21
          • 2012-01-30
          • 1970-01-01
          • 2011-11-04
          • 2012-02-28
          • 2012-05-01
          • 2018-09-28
          相关资源
          最近更新 更多