python - 审核 url 对允许的方案开放。允许使用 "file:"或自定义方案通常是意外的

标签 python pytest codacy

我在 Python 中使用这个语句

 jsonreq = json.dumps({'jsonrpc': '2.0', 'id': 'qwer', 'method': 'aria2.pauseAll'})
 jsonreq = jsonreq.encode('ascii')
 c = urllib.request.urlopen('http://localhost:6800/jsonrpc', jsonreq)

我在执行代码质量测试时收到此警告/错误

Audit url open for permitted schemes. Allowing use of "file:" or custom schemes is often unexpected.

最佳答案

因为我偶然发现了这个问题,而接受的答案对我不起作用,所以我自己研究了一下:

为什么 urlib 存在安全风险

urlib 不仅可以打开 http://或 https://URL,还可以打开 ftp://和 file://。 这样就可以在执行机器上打开本地文件,如果要打开的 URL 可以被外部用户操纵,这可能会带来安全风险。

如何解决这个问题

您有责任在使用 urllib 打开 URL 之前验证 URL。 例如

if url.lower().startswith('http'):
  req = urllib.request.Request(url)
else:
  raise ValueError from None

with urllib.request.urlopen(req) as resp:
  [...]

如何解决这个问题,使 linter(例如 bandit)不再提示

至少 bandit 有一个简单的函数调用黑名单。只要您使用 urllib,linter 就会发出警告。即使您确实如上所示验证您的输入。 (或者甚至使用硬编码 URL)。

向该行添加一个 #nosec 注释以抑制来自 bandit 的警告或为您的 linter/代码检查器查找 suppression 关键字。最好还添加额外的评论,说明为什么您认为在您的案例中这不值得警告。

关于python - 审核 url 对允许的方案开放。允许使用 "file:"或自定义方案通常是意外的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48779202/

相关文章:

python - Codacy bad 给 super 的第一个论点

python - 如何在预提交 Hook 之前运行自定义 shell 脚本文件

python - 如何从pandas df中的每一行中创建新列

memory-leaks - 使用pytest进行pyqt测试中的内存泄漏

python - PytestDeprecationWarning 在测试设置 : the funcargnames attribute was an alias for fixturenames

javascript - 类体之外不允许使用 "this"关键字

python - 自动化无聊的东西-第5章-国际象棋字典验证器

python - 将 stanford pos tagger 导入 nltk 时遇到问题

mysql - Pytest RuntimeError : No application found. 在 View 函数内工作或推送应用程序上下文

java - Codacy 未显示使用 Travis-CI 的覆盖范围