【发布时间】:2010-04-19 13:53:02
【问题描述】:
如何在不将 HTML 锁定为 javascript 字符串的情况下处理 HTML 和 JSON 模板?
我有一个支持 ajax 的网站,它通过使用 HTML 插入 JSON 值来呈现大量动态内容。这一切都很好。
但这意味着我的 JavaScript 中有大量的 HTML。 例如:
var template = "<div>Foo: {bar}</div><div>Blah: {vtha}</div>";
template.interpolate({bar:"bar",blah:"vtha"});
我已经把它减少了一点——我的一些动态元素有很多 HTML 和很多东西。
我正在使用 jQuery,并且我在 Rails 上进行构建,所以如果任何一个框架中都有一些智能的东西,那就太好了。
供参考,上面使用的String插值函数为:
String.prototype.interpolate = function (o) {
return this.replace(/{([^{}]*)}/g,
function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
【问题讨论】:
-
那么...问题是什么?您是在问如何在不将 HTML 锁定为 javascript 字符串的情况下执行此操作吗?
-
插值是一个潜在的安全问题。因为它不是 HTML 转义文本字符串,所以您最终在页面上放置的任何不受信任的输入都可以将标记(包括 JavaScript)注入页面的安全上下文中。你犯了客户端 XSS 风险。
-
@peter:说得好,比我的问题要简洁得多。
-
@bobince:这里没有风险,数据都是可信的。
标签: javascript jquery html ruby-on-rails templates