Python,Jinja2 nl2br和安全性

时间:2015-04-17 14:21:25

标签: python xss jinja2

我使用snippet from Jinja2在html中显示多行文字,而我正面临一个问题:

如果用户输入

"Hello\nMy name is Jon"

nl2br标记会将其呈现为

"Hello<br />My name is Jon"

正确解释br(断线)。

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

"Hello<script>alert('hacked');</script>"

由于我必须解释html以正确显示分隔线,<script>也将被执行...

我该如何避免?

1 个答案:

答案 0 :(得分:3)

您已链接到已经的示例代码在替换换行符之前转义输入。随后,文本被标记为安全,因为在那一点上它是。相关代码是:

from jinja import escape, Markup
value = escape(value)
return Markup(value)

对于输入"Hello<script>alert('hacked');</script>",这会产生"Hello &lt;script&gt;alert(&#39;hacked&#39;);&lt;/script&gt;"。请注意,有问题的语法已替换为转义字符。在HTML文档中呈现时,将不会执行脚本,只需文本。