跳到内容

ruff-unsafe-markup-use (RUF035)

警告:此规则已被移除,其文档仅供历史参考。

已移除

此规则已在 bandit 中实现,并已重新映射到 S704

作用

检查传递给 markupsafe.Markup 的是否为非字面字符串。

为什么这不好?

markupsafe.Markup 不执行任何转义,因此传递动态内容(如 f-strings、变量或插值字符串)可能会导致 XSS 漏洞。

相反,您应该插值 Markup 对象。

使用 lint.flake8-bandit.extend-markup-names 可以将其他对象视为 Markup

此规则最初受 flake8-markupsafe 的启发,但默认情况下不会为 i18n 相关的调用划分任何例外情况。

您可以使用 lint.flake8-bandit.allowed-markup-calls 指定例外情况。

示例

给定

from markupsafe import Markup

content = "<script>alert('Hello, world!')</script>"
html = Markup(f"<b>{content}</b>")  # XSS

建议改为

from markupsafe import Markup

content = "<script>alert('Hello, world!')</script>"
html = Markup("<b>{}</b>").format(content)  # Safe

给定

from markupsafe import Markup

lines = [
    Markup("<b>heading</b>"),
    "<script>alert('XSS attempt')</script>",
]
html = Markup("<br>".join(lines))  # XSS

建议改为

from markupsafe import Markup

lines = [
    Markup("<b>heading</b>"),
    "<script>alert('XSS attempt')</script>",
]
html = Markup("<br>").join(lines)  # Safe

Options (选项)

参考