【问题标题】:How can I stop DustJS converting entities back to normal characters?如何停止 DustJS 将实体转换回普通字符?
【发布时间】:2016-08-25 01:53:22
【问题描述】:

要复制我的问题,请转到here,并将此代码粘贴到相应的部分:

灰尘模板:

{title|s}

数据:

{
  "title": "<script>alert('yo');</script>"
}

您将看到以下输出:

<script>alert('yo');</script>

在我看来,这是一种错误的行为,因为实体会被转换回普通字符。这导致 alert 被执行。

我想控制我插入模板的值是否通过 JS 进行 HTML 转义。所以 Dust JS 不应该在后面做任何智能操作,而只是将我想要的内容提供给模板。我怎样才能做到这一点?

【问题讨论】:

    标签: javascript escaping dust.js html-escape-characters


    【解决方案1】:

    |s 似乎代表抑制库执行的任何其他转义例程。由于您已经将数据作为转义 HTML 输入,因此它会准确地吐出您给它的内容。浏览器将其呈现为&amp;lt;script&amp;gt;alert('yo');&amp;lt;/script&amp;gt;,但在幕后它仍然是&amp;lt;script&amp;gt;alert('yo');&amp;lt;/script&amp;gt; 由于您的字符串已经转义,因此不会执行任何警报:

    var data = {
      "title": "&lt;script&gt;alert('yo');&lt;/script&gt;"
    };
    
    //innerHTML version
    var src = document.getElementById('template-s').textContent;
    var compiled = dust.compile(src, 'output-s');
    
    dust.loadSource(compiled);
    
    dust.render('output-s', data, function(err, out) {
      document.getElementById('output-s').innerHTML = out;
    });
    
    // textContent version
    
    src = document.getElementById('template-s-textContent').textContent;
    compiled = dust.compile(src, 'output-s-textContent');
    
    dust.loadSource(compiled);
    
    dust.render('output-s-textContent', data, function(err, out) {
      document.getElementById('output-s-textContent').textContent = out;
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/dustjs-linkedin/2.7.3/dust-full.js"></script>
    <script type="text/dust" id="template-s">Output {title|s}</script>
    <script type="text/dust" id="template-s-textContent">Output {title|s}</script>
    
    <h3>Flag: |s set as innerHTML</h3>
    <div id="output-s"></div>
    <h3>Flag: |s set as textContent</h3>
    <div id="output-s-textContent"></div>

    This article 似乎比官方文档更好地解释了过滤器。他的示例有一个未转义的字符串,根据您使用的标志说明何时执行警报。

    【讨论】:

    • 你是对的......我注意到我在将其传递给模板之前执行了 jQuery.text() 。这是我做错了什么演示的小提琴:jsfiddle.net/op2nvsc7
    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2021-11-30
    • 2013-05-02
    相关资源
    最近更新 更多