将套接字绑定到所有网络接口¶
ID: py/bind-socket-all-network-interfaces
Kind: problem
Security severity: 6.5
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-200
Query suites:
- python-code-scanning.qls
- python-security-extended.qls
- python-security-and-quality.qls
套接字可用于与网络上的其他机器通信。您可以使用 (IP 地址,端口) 对来定义您创建的套接字的访问限制。当使用内置的 Python socket
模块时(例如,当构建消息发送器服务或 FTP 服务器数据传输器时),您必须将端口绑定到某个接口。当您使用 0.0.0.0
作为 IP 地址将端口绑定到所有接口时,您实际上允许它接受来自任何 IPv4 地址的连接,前提是它可以通过路由到达套接字。因此,绑定到所有接口与安全风险相关联。
建议¶
仅将服务传入流量绑定到专用接口。如果您需要使用内置的 socket
模块绑定多个接口,请创建多个套接字(而不是将一个套接字绑定到所有接口)。
示例¶
在此示例中,两个套接字不安全,因为它们绑定到所有接口;一个通过 0.0.0.0
符号,另一个通过空字符串 ''
。
import socket
# binds to all interfaces, insecure
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 31137))
# binds to all interfaces, insecure
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 4040))
# binds only to a dedicated interface, secure
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('84.68.10.12', 8080))
参考资料¶
Python 参考: 套接字族.
Python 参考: 套接字编程 HOWTO.
常见漏洞和暴露: CVE-2018-1281 详细信息.
常见弱点枚举:CWE-200.