首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS将如何在实时多态性的存在下运行?

AngularJS将如何在实时多态性的存在下运行?
EN

Stack Overflow用户
提问于 2014-01-22 11:53:36
回答 1查看 254关注 0票数 0

英国“金融时报”刚刚在一篇文章中报道说,实时多态性可能是网络安全的下一个飞跃。形状安全吸引了来自Google、Facebook、LinkedIn、Twitter和DropBox的投资者。

Shape Security's Technology页面显示了如下所示的明文html:

代码语言:javascript
复制
<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>

将被动态转换,以便在每个页面请求中更改绑定名称,例如:

代码语言:javascript
复制
<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专家将如何处理实时多态性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-24 14:34:03

老实说,这不会影响任何框架,但这取决于您如何编写代码。

下面是一个如何避免问题的例子。

您需要确保在对象中存储id和属性的字符串表示,并相应地命名它们。

而不是:

代码语言:javascript
复制
var username = document.getElementById('username');

你会这样做的:

var username = document.getElementById(ids.username);

为了实现这一点,您需要创建一个对象并创建变量,您将指向这些变量以供参考:

代码语言:javascript
复制
var ids = {
            submit : "submit",
            username : "username",
            password : "password",
            email : "email"
        }

因此,当您对元素上的id进行加密时,需要替换“id”对象中的字符串。下面是加密的示例

代码语言:javascript
复制
 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’对象。

希望这会有所帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21282207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档