javascript – 强制Backbone或Underscore总是逃避所有变量?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 强制Backbone或Underscore总是逃避所有变量?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2638字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 强制Backbone或Underscore总是逃避所有变量?](/upload/InfoBanner/zyjiaocheng/817/beea9fd93cb042a4b51dc234ce1d8641.jpg)
我是Backbone的新手,正在帮助维护应用程序.我想在Backbone的所有正常情况下都默认为逃避模型数据,以帮助避免默认情况下的XSS攻击.
我知道我们可以这样做
<%- someModelAttribute %>
和
model.escape('attr')
在我们的应用程序中转义数据,但我想切换它
<%= someModelAttribute %>
和
model.get('attr')
也是这样做的….所以默认情况下,默认情况下,使用这些标签和方法的所有现有代码和未来代码都会被转义.然后我想介绍另一种模型方法,如“model.getDataThatShouldBeSafeHtml”,以便在开发人员获取应包含HTML的数据时100%清楚.
那么有什么方法可以让我将“<%=”标签和“model.get”方法切换为与它们的转义等价物相同? 我只是问,因为我认为这可能已经在某个地方完成,或者已经成为骨干的一部分,我想避免重建轮子!
解决方法:
我发现了一种简单的方法,因此默认情况下所有模板都会被转义.由于Backbone使用Underscore作为它的模板引擎,我搜索了一下,发现你可以使用_.templateSettings自定义下划线分隔符,描述为here on the Underscore site.注意,如果你确保所有的html都是使用这些模板写出来的,那么你就是适用于所有XSS.所以不要在一些简单的场景中跳过使用模板,在这些情况下也要使用它们来避免使用XSS!
你可以用这个小提琴来测试它:http://jsfiddle.net/vx0pw2n0/
所以我所做的只是使它<%=和<% - 默认用于显示转义数据. evaluate标记<%仍然存在,可用于使用print语句输出所需的任何HTML.我还引入了一个新标签,<%cleanHtml,可用于输出HTML而不进行转义,无需说print(someVariable)
<script type="text/javascript">
//
// This is the important part - The part that changes what underscore uses
// for template delimiters.
//
_.templateSettings =
{
escape: /<%[=-]([\s\S]+?)%>/g,
interpolate: /<%cleanHtml([\s\S]+?)cleanHtml%>/g,
evaluate: /<%([\s\S]+?)%>/g
};
// Test it out
var t = _.template($('#t').html());
var html = t({ title: '<b>pancakes</b>' });
$("#target").html(html);
console.log(html);
</script>
<!-- Sample Underscore Template showing different ways of using it -->
<script id="t" type="text/x-underscore">
<div><%= title %></div>
<div><%- title %></div>
<div><%safeHtmlOnly title safeHtmlOnly%></div>
<div><% print(title) %></div>
</script>
<div id="target"></div>
使这项工作全球化
要使其在全局范围内工作,您可能必须将Underscore配置为模块,可以这样做:
实现作为Backbone的依赖
配置Require.js模块
// When you initially setup require.js, add a new module to configure underscore
// Make it a dependency of backbone, so it'll always be loaded whenever
// backbone is used.
require.config({
shim: {
underscore: {
exports: '_'
},
backbone: {
deps: ['underscoreConfig', 'underscore', 'jquery'],
exports: 'Backbone'
},
jquery: {
exports: 'jQuery'
}
}
});
underscoreConfig.js
define(['underscore'], function (_) {
'use strict';
_.templateSettings =
{
escape: /<%[=-]([\s\S]+?)%>/g,
interpolate: /<%cleanHtml([\s\S]+?)cleanHtml%>/g,
evaluate: /<%([\s\S]+?)%>/g
};
return _;
});
内容总结
以上是互联网集市为您收集整理的javascript – 强制Backbone或Underscore总是逃避所有变量?全部内容,希望文章能够帮你解决javascript – 强制Backbone或Underscore总是逃避所有变量?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。