Flask安全文本呈现用户生成的块

时间:2014-01-16 16:48:57

标签: python sqlite flask jinja2

目前正在编写一个bbs风格的应用程序,我想知道显示用户安全输入的文本的最佳做法是什么。这意味着我不希望他们输入javascript或类似的东西。现在我正在渲染,并禁止“<”和“>”字符。虽然我猜这不是正确的方法。加上线条切割,但不应该。

你可以给我一些关于如何做到这一点的提示吗?

更多信息:我使用flask-sqlalchemy将这些帖子存储在sqlite数据库中。所以我不希望它们包含SQL-Injection(我非常怀疑它可能与sqlalchemy有关)

3 个答案:

答案 0 :(得分:4)

如果您使用Flask设置的Jinja2模板,默认情况下所有内容都会自动转义为HTML字符;请参阅模板文档中的Jinja2 setup

  

除非自定义,否则Jinja2由Flask配置如下:

     
      
  • .html.htm.xml以及.xhtml
  • 结尾的所有模板启用了自动加密功能   
  • 模板可以使用{% autoescape %}代码选择加入/退出自动加载。
  •   

SQLAlchemy,如果使用得当,确实可以保护您免受SQL注入攻击。

如果您希望将用户输入中的换行符转换为HTML输出中的<br/>标记,则可以使用此Flask Snippet添加Jinja2标记过滤器来执行此操作;将输入变量中的换行符转换为渲染输出中的<br/>标记,同时仍然可以转义其他所有内容。多个换行符会转换为<p>段落标记。

将该代码段作为模块添加到项目中,确保已导入,然后使用模板中的nl2br过滤器:

User text as paragraphs with line breaks:<br/>
{{ user_text | nl2br }}

答案 1 :(得分:1)

在Flask中默认打开Jinja的自动视图。任何未明确标记为安全的内容都将被正确转义。

http://flask.pocoo.org/docs/templating/#controlling-autoescaping

答案 2 :(得分:1)

我使用Bleach - http://bleach.readthedocs.org/来删除HTML并只允许通过我想要的标记。它真的很容易使用。