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