gpt4 book ai didi

python - Flask 安全文本渲染用户生成的 block

转载 作者:行者123 更新时间:2023-11-28 21:21:34 25 4
gpt4 key购买 nike

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

你能给我一些提示吗?

更多信息:我正在使用 flask-sqlalchemy 将这些帖子存储在 sqlite 数据库中。所以我不希望它们包含 SQL 注入(inject)(我非常怀疑是否可以使用 sqlalchemy)

最佳答案

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

Unless customized, Jinja2 is configured by Flask as follows:

  • autoescaping is enabled for all templates ending in .html, .htm, .xml as well as .xhtml
  • a template has the ability to opt in/out autoescaping with the {% autoescape %} tag.

正确使用 SQLAlchemy 确实可以保护您免受 SQL 注入(inject)攻击。

如果您希望将用户输入中的换行符转换为 <br/> HTML 输出中的标记,您可以使用此 Flask Snippet它添加了一个 Jinja2 标签过滤器来实现这一点;将输入变量中的换行符翻译成 <br/>渲染输出中的标签,同时仍然转义其他所有内容。多个换行符被翻译成 <p>段落标签。

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

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

关于python - Flask 安全文本渲染用户生成的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21167825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com