英国“金融时报”刚刚在一篇文章中报道说,实时多态性可能是网络安全的下一个飞跃。形状安全吸引了来自Google、Facebook、LinkedIn、Twitter和DropBox的投资者。
Shape Security's Technology页面显示了如下所示的明文html:
<form action="login_form.php">
<input id="username" name="username"/>
<input id="password" name="password"/>
<input id="rememberMe" name="rememberMe"/>
<input id="login" name="login"/>
<input type="submit"/>
</form>将被动态转换,以便在每个页面请求中更改绑定名称,例如:
<form action="d94M2eQgBK">
<input id="v6DbNQEs4z" name="dtTtA6tsmi"/>
<input id="b5KbBSjCT6" name="rWttCLcv3f"/>
<input id="zQNA3ZBgKz" name="R2bHEe3taV"/>
<input id="rvnFbpxKwN" name="HNnQwnUbtm"/>
<input type="submit"/>
</form>在AngularJS中,我们可能会使用指令ng-model在html级别上将角绑定字段设置为控制器中的javascript变量。实时多态还必须更改控制器中的变量名。在某种程度上,随着深度的增加,这些更改必须稳定下来,以便控制器变量可以被传递回服务,等等。
像ng-polymorph-model这样的指令似乎可以封装预期的多态性。但是,向客户端提供的DOM或js代码中的任何程度的稳定性都是未来攻击的一个矢量。
我很好奇AngularJS专家将如何处理实时多态性。
发布于 2014-01-24 14:34:03
老实说,这不会影响任何框架,但这取决于您如何编写代码。
下面是一个如何避免问题的例子。
您需要确保在对象中存储id和属性的字符串表示,并相应地命名它们。
而不是:
var username = document.getElementById('username');你会这样做的:
var username = document.getElementById(ids.username);
为了实现这一点,您需要创建一个对象并创建变量,您将指向这些变量以供参考:
var ids = {
submit : "submit",
username : "username",
password : "password",
email : "email"
}因此,当您对元素上的id进行加密时,需要替换“id”对象中的字符串。下面是加密的示例
function encrypt() {
var elems = document.querySelectorAll("[id]");
for (var a = 0; a < elems.length; a++) {
var elem = elems[a];
if (ids[elem.id])
{
var name =elem.id;
var g = guid();
elem.id =g;
ids[name] =g;
}
}
console.log(ids);
}
function s4() {
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
};
function guid() {
return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
}这样做的目的是用id属性抓取所有元素并循环它们,更改id属性并用正确的引用名更新‘id’对象。
希望这会有所帮助:)
https://stackoverflow.com/questions/21282207
复制相似问题