[英]How will AngularJS run in the presence of real-time polymorphism
英國《金融時報》剛剛在文章“由Google支持的合資企業使用變形代碼來擊敗黑客”中報道,實時多態性可能是網絡安全的下一個飛躍。 Shape Security吸引了來自Google Ventures,Facebook,LinkedIn,Twitter和DropBox的投資者。
Shape Security的“技術”頁面顯示明文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專家將如何處理實時多態性。
老實說,這不會影響任何框架,但是取決於您編寫代碼的方式。
這是如何避免問題的示例。
您將需要確保將ID和屬性的字符串表示形式存儲在對象中,並相應地命名它們。
代替:
var username = document.getElementById('username');
您將執行以下操作:
var username = document.getElementById(ids.username);
現在要實現此目的,您需要創建一個對象並創建變量,您將指向這些變量以供參考:
var ids = {
submit : "submit",
username : "username",
password : "password",
email : "email"
}
因此,當您加密元素上的ID時,則需要替換'ids'對象中的字符串。 以下是加密的示例
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屬性,並使用正確的引用名稱更新'ids'對象。
希望這可以幫助 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.