栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在flask中禁用自动转义

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在flask中禁用自动转义

您可以采用两种合理的方法。

解决方案1

当您将不安全的输入和HTML组合到一个变量

flask.Markup
中时,实际上是一种方便的方法。基本思想是在换行符上分割文本,确保HTML转义了您不信任的每一行,然后将它们重新粘合在一起,再加
<br/>
上您确实信任的标记。

这是完整的应用程序,以证明这一点。它使用与

bar.html
您的问题相同的模板。请注意,我在其中添加了一些不安全的HTML,
footext
以说明为什么关闭自动转义
不是 解决您的问题的安全方法。

import flaskapp = flask.Flask(__name__)footext = """fo<script>alert('oops')</script>o"""@app.route("/foo")def foo():    text = ""    for line in footext.split('n'):        text += flask.Markup.escape(line) + flask.Markup('<br />')    return flask.render_template("bar.html", text=text)if __name__ == "__main__":    app.run(debug=True)

解决方案2

另一个选择是将复杂度推入模板,从而使视图更简单。只需分成

footext
几行,然后您就可以在模板中对其进行循环,自动转义将确保此安全。

简单的视图:

@app.route("/foo")def foo():    return flask.render_template("bar.html", text=footext.split('n'))

模板bar.html变为:

<html>    {%- for line in text -%}        {{ line }}        {%- if not loop.last -%} <br />        {%- endif -%}    {%- endfor -%}</html>

结论

我个人更喜欢解决方案2,因为它会将渲染关注点(线条由

<br/>
标签分隔)放在它们所属的模板中。如果您将来想要更改此设置,例如在项目符号列表中显示行,则只需更改模板,而不是代码。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651874.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号