我使用snippet from Jinja2在html中显示多行文字,而我正面临一个问题:
如果用户输入
"Hello\nMy name is Jon"
nl2br
标记会将其呈现为
"Hello<br />My name is Jon"
正确解释br(断线)。
现在这很好,但如果用户输入
"Hello<script>alert('hacked');</script>"
由于我必须解释html以正确显示分隔线,<script>
也将被执行...
我该如何避免?
答案 0 :(得分:3)
您已链接到已经的示例代码在替换换行符之前转义输入。随后,文本被标记为安全,因为在那一点上它是。相关代码是:
from jinja import escape, Markup
value = escape(value)
return Markup(value)
对于输入"Hello<script>alert('hacked');</script>"
,这会产生"Hello <script>alert('hacked');</script>"
。请注意,有问题的语法已替换为转义字符。在HTML文档中呈现时,将不会执行脚本,只需文本。