DojoToolkit:如何转义HTML字符串
Dojo Toolkit: how to escape an HTML string?
我的HTML5应用程序的用户可以在表单中输入他的名字,这个名字将显示在其他地方。更具体地说,它将成为某些HTML元素的innerHTML
。
问题是,如果在表单中输入有效的HTML标记,即某种HTML注入(如果愿意的话),就会利用这一点。
用户名只存储并显示在客户端,所以最终用户自己是唯一受到影响的人,但这仍然很草率。
在将字符串放入Dojo中的元素innerHTML
之前,有没有一种方法可以对其进行转义?我猜想Dojo在某一点上确实有这样一个函数(dojo.string.escape()
),但它在1.7版本中并不存在。
谢谢。
dojox.html.entities.encode(myString);
dojox/html/entities
。不幸的是,官方文档仍然只提供1.7之前的非AMD示例。
以下是如何将该模块与AMD一起使用的示例:
var str = "<strong>some text</strong>"
require(['dojox/html/entities'], function(entities) {
var escaped = entities.encode(str)
console.log(escaped)
})
输出:
<strong>some text</strong>
从Dojo1.10开始,转义函数仍然是字符串模块的一部分。
http://dojotoolkit.org/api/?qs=1.10/dojo/string
以下是如何将其用作一个简单的模板系统。
require([
'dojo/string'
], function(
string
){
var template = '<h1>${title}</h1>';
var message = {title: 'Hello World!<script>alert("Doing something naughty here...")</script>'}
var html = string.substitute(
template
, message
, string.escape
);
});
我试图了解其他库是如何实现这个功能的,我从MooTools那里窃取了以下想法:
var property = (document.createElement('div').textContent == null) ? 'innerText': 'textContent';
elem[property] = "<" + "script" + ">" + "alert('a');" + "</" + "script" + ">";
因此,根据MooTools的说法,有innerText或textContent属性可以转义HTML。
检查dojo.replace
:的示例
require(["dojo/_base/lang"], function(lang){
function safeReplace(tmpl, dict){
// convert dict to a function, if needed
var fn = lang.isFunction(dict) ? dict : function(_, name){
return lang.getObject(name, false, dict);
};
// perform the substitution
return lang.replace(tmpl, function(_, name){
if(name.charAt(0) == '!'){
// no escaping
return fn(_, name.slice(1));
}
// escape
return fn(_, name).
replace(/&/g, "&").
replace(/</g, "<").
replace(/>/g, ">").
replace(/"/g, """);
});
}
// that is how we use it:
var output = safeReplace("<div>{0}</div",
["<script>alert('Let'' break stuff!');</script>"]
);
});
来源:http://dojotoolkit.org/reference-guide/1.7/dojo/replace.html#escaping-替换
相关文章:
- 将c#视图模型转换为javascript模型时转义HTML标记
- Regex以转义HTML标记
- 需要使用Java编码/转义HTML字符串,并在JavaScript中解码HTML字符串
- 如何让AngularJS输出转义HTML
- 在某些浏览器中,jquery.html()正在取消转义html字符
- 在 JavaScript 中准确取消转义 HTML 实体
- 为什么使用替换来取消转义 html 标签也会去除所有其他 html 标签
- backbone.js正在转义html
- DojoToolkit:如何转义HTML字符串
- 转义 $(“html”).ajaxError() 在其中一个 $.ajax() 调用中
- Meteor React中的转义HTML标签
- 转义HTML标记.字符集编码可能出现的任何问题
- Select2不会转义HTML或javascript
- 我不想转义HTML标记,也不想在Angular应用程序中使用对象文字
- 我不想在Angular应用程序中转义HTML标记
- 转义HTML和Javascript之间的特殊字符
- 如何在laravel 4.2中使用handlebar js转义html
- 在Javascript中转义html属性中的双引号
- 转义HTML标记属性中的双引号
- 在$scope变量中转义HTML的快速方法