【问题标题】:How do I html-escape dangerous unsanitized input in jinja2?如何在 jinja2 中对危险的未经处理的输入进行 html 转义?
【发布时间】:2010-12-06 02:33:53
【问题描述】:

我可以在模板中完成还是必须在 python 代码中完成?

我有一个可能包含 dau&s 字符的变量。我如何在 jinja2 中逃脱它?

【问题讨论】:

    标签: python security escaping jinja2


    【解决方案1】:

    您可以进行字符串检查并替换为相应的转义字符。

    例如:string=I am a special character <
    执行以下操作:

    string.replace("<","&lt ;")
    

    请注意,在您的代码中, t 和 ; 之间的空格已被淘汰。无法在此处消除此问题,因为它将被格式化为显示

    然后使用 jinja2 打印出格式化的字符串。

    【讨论】:

      【解决方案2】:

      例如

      {{ user.username|e }}
      

      通过|e 过滤器过滤

      Jinja: Template Designer Documentation -> HTML Escaping

      【讨论】:

        【解决方案3】:

        Flask 有一个内置的tojson 过滤器:

        http://flask.pocoo.org/docs/templating/#standard-filters

        【讨论】:

          【解决方案4】:

          如果你想在你的程序中转义html,你可以这样做(例子):

          >>> import jinja2
          >>> jinja2.__version__
          '2.6'
          >>> a
          '<script>alert("yy")</script>'
          >>> jinja2.escape(a)
          Markup(u'&lt;script&gt;alert(&#34;yy&#34;)&lt;/script&gt;')
          >>> str(jinja2.escape(a))
          '&lt;script&gt;alert(&#34;yy&#34;)&lt;/script&gt;'
          

          【讨论】:

            【解决方案5】:

            您还可以告诉环境自动转义所有内容:

            e = Environment(loader=fileloader, autoescape=True)
            

            注意:在 jinja1 中这是 auto_escape

            【讨论】:

              猜你喜欢
              • 2012-03-27
              • 2016-04-07
              • 1970-01-01
              • 1970-01-01
              • 2010-12-25
              • 1970-01-01
              • 1970-01-01
              • 2013-05-08
              • 1970-01-01
              相关资源
              最近更新 更多