6

我最近看到土匪抱怨B104

绑定到所有网络接口可能会为非预期接口上的流量打开服务,这些接口可能没有正确记录或保护。这个插件测试寻找一个字符串模式“0.0.0.0”,它可能表示硬编码绑定到所有网络接口。

>> Issue: Possible binding to all interfaces.
   Severity: Medium   Confidence: Medium
   Location: ./examples/binding.py:4
3   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
4   s.bind(('0.0.0.0', 31137))
5   s.bind(('192.168.0.1', 8080))

“为非预期接口上的流量开放服务”是什么意思?

我已经在 Flask 应用程序中看到了这一点app.run(host="0.0.0.0")。一个人应该写什么?

(作为旁注:这不在生产中使用。这主要是为了在开发过程中进行简单的测试。但我不确定gunicorn是否可能在类似的配置下也有同样的问题)

4

1 回答 1

7

绑定到“0.0.0.0”时,您接受来自任何地方的传入连接。当您的代码经过测试并且您的项目是“安全的”(例如针对 SQL 注入或其他此类讨厌的攻击)时,您会在生产环境中执行此操作。

每当您还没有准备好进行生产或者当您不故意接受来自任何地方的传入连接时,都应该有一个安全的 default。通常这是“127.0.0.1”或“localhost”,因此只接受来自本地机器的传入连接。这不会保护您的代码免受 SQL 注入,但它会阻止其他人针对您的代码并针对您的项目执行 SQL 注入。

请注意,测试通常不会抱怨绑定到 0.0.0.0 而是抱怨意外绑定到 0.0.0.0(因此可能是整个世界)。因此,应避免 0.0.0.0 的任何硬编码引用(以创建上述安全默认值)。

至于替代方案,您可以在开发时使用 127.0.0.1 或 localhost,或者您可以使用本地网络接口来启用本地网络上其他机器的访问。使用您的网络接口可以让您在计算机上构建和托管一个 Web 应用程序,并在手机连接到同一个 WiFi 时在手机上测试结果。

于 2020-09-28T20:07:43.033 回答