suspicious-mark-safe-usage (S308)
源自 flake8-bandit linter。
作用
检查对 django.utils.safestring.mark_safe
调用的使用情况。
为什么这不好?
跨站脚本 (XSS) 漏洞允许攻击者执行任意 JavaScript。 为了防御 XSS 攻击,Django 模板假定数据是不安全的,并在渲染之前自动转义恶意字符串。
django.utils.safestring.mark_safe
将字符串标记为在 HTML 模板中安全使用,从而绕过 XSS 保护。 如果字符串的内容是动态生成的,则其使用可能是危险的,因为如果字符串未正确转义,则可能允许跨站点脚本攻击。
对于动态生成的字符串,请考虑使用 django.utils.html.format_html
。
在 预览 中,此规则还将标记对 django.utils.safestring.mark_safe
的引用。
示例
from django.utils.safestring import mark_safe
def render_username(username):
return mark_safe(f"<i>{username}</i>") # Dangerous if username is user-provided.
建议改为
from django.utils.html import format_html
def render_username(username):
return django.utils.html.format_html("<i>{}</i>", username) # username is escaped.