【问题标题】:Why won't Django auto-escape my <script> tags?为什么 Django 不会自动转义我的 <script> 标签?
【发布时间】:2008-09-30 17:04:01
【问题描述】:

我的 Django 应用有一个 Person 表,它在名为 details 的字段中包含以下文本:

&lt;script&gt;alert('Hello');&lt;/script&gt;

当我在模板中调用 PersonForm.details 时,页面会相应地呈现脚本(也就是显示带有“Hello”一词的警报)。我对这种行为感到困惑,因为我一直认为Django 1.0 autoescaped 是默认的模板内容。

知道这里可能发生了什么吗?

更新:这是我模板中的 sn-p。没有什么特别性感的:

{{ person_form.details }}

更新 2: 我已经尝试过 escapeforce-escapeescapejs。这些都不起作用。

【问题讨论】:

    标签: django templates


    【解决方案1】:

    您需要将值标记为 |我认为是安全的(我猜你是在这里填写数据库中的值(?)):

    {{ value|safe }}
    

    你能发布一个模板样本吗?可能更容易看出问题所在

    [Edit] ..或者你是说你想要它来转义值(使它们安全)?您是否尝试过手动转义字段:

    {{ value|escape }}
    

    [Edit2] 也许escapejs from the Django Project docs 是相关的:

    escapejs
    
    New in Django 1.0.
    
    Escapes characters for use in JavaScript strings. This does not make the string safe for use in HTML, but does protect you from syntax errors when using templates to generate JavaScript/JSON.
    

    [Edit3] 那么 force_escape 呢:

        {{ value|force_escape }}
    

    ...我知道这很明显,但是您绝对确定您的浏览器中没有进行任何缓存?我自己也被那个绊倒了几次;-)

    【讨论】:

    • 我尝试使用“escape”模板标签强制转义。没有骰子。我想要它做的是不呈现警报 - 在我看来,这将是逃避价值。
    • 奇怪.. 今晚我会在我的 DJango 安装上试一试,看看能不能找到任何东西......
    【解决方案2】:

    发现问题。我用来向某些 Ext 小部件呈现数据的 JSON 字符串是罪魁祸首。非常感谢乔恩·凯奇。尽管问题是由其他来源引起的,但仍接受了答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 2011-09-01
      • 2020-07-14
      相关资源
      最近更新 更多