javascript - 如何阻止 DustJS 将实体转换回普通字符?

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

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

灰尘模板:

{title|s}

数据:

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

您将看到以下输出:

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

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

我想控制插入到模板中的值是否通过 JS 进行 HTML 转义。因此,Dust JS 不应在后面执行任何智能操作,而只需向模板提供我想要的内容即可。我怎样才能实现这一目标?

最佳答案

|s似乎代表抑制库完成的任何额外转义例程。由于您已经以转义 HTML 的形式输入数据,因此它会准确地输出您提供的内容。浏览器将其呈现为 <script>alert('yo');</script> ,但在幕后它仍然是 &lt;script&gt;alert('yo');&lt;/script&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似乎比官方文档更好地解释了过滤器。他的示例有一个未转义的字符串,该字符串说明了警报何时将根据您使用的标志执行。

关于javascript - 如何阻止 DustJS 将实体转换回普通字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39135531/

相关文章:

Javascript/jQuery 按键记录

php - LIKE 表达式中的 MySQL 连字符

windows - 如何转义批处理文件中的符号?

javascript - 在 <td> 中查找文本,然后有条件地更改另一个 <td> 中的文本

javascript - 循环遍历 JSON 并将值添加到代码中?

bash - 传递给命令行参数时如何在 Bash 中转义变量

javascript - 浏览器端Dust.js

javascript - Dust.js - 部分扩展基础

javascript - 如何在 Node 上的 .dust 文件上使用 connect-flash 和 express-messages 显示消息

javascript - 在 DDL 中查找 optgroup 的值