Python、Jinja2 nl2br和安全性

Python、Jinja2 nl2br和安全性,python,xss,jinja2,Python,Xss,Jinja2,我正在使用html显示多行文本,我面临一个问题: 如果用户输入 "Hello\nMy name is Jon" "Hello<script>alert('hacked');</script>" nl2br标记将其呈现为 "Hello<br />My name is Jon" “你好我叫乔恩” 正确解释br后(换行符) 现在这很好,但是如果用户输入 "Hello\nMy name is Jon" "Hello<script>alert('h

我正在使用html显示多行文本,我面临一个问题:

如果用户输入

"Hello\nMy name is Jon"
"Hello<script>alert('hacked');</script>"
nl2br
标记将其呈现为

"Hello<br />My name is Jon"
“你好
我叫乔恩”
正确解释br后(换行符)

现在这很好,但是如果用户输入

"Hello\nMy name is Jon"
"Hello<script>alert('hacked');</script>"
“Helloalert('hacked')
由于我必须解释html以正确显示特征线,因此
也将被执行


如何避免这种情况?

您链接到的示例代码在替换换行符之前已经转义了输入。随后,文本被标记为安全,因为此时它是安全的。有关守则如下:

from jinja import escape, Markup
value = escape(value)
return Markup(value)
对于输入
“Helloalert('hacked');”
,这将导致
“Hello scriptalert(&&39;hacked&&39;);/script”
。请注意,有问题的语法已替换为转义字符。在HTML文档中呈现时,将不执行脚本,只执行文本