2016-12-28 45 views
2

在角的js文件的安全性是使用$腕錶觀看的用戶的值寫入生成的內容是不安全的:

有一些是模板和表達式可以控制方式:...

傳入呼叫從用戶提供的內容,以產生一個上範圍以下方法的表達式: ...

$觀看(userContent,...)

userContent在這裏有什麼含義?如果我看用戶輸入字段的ngModel值,這是一個userContent嗎?小提琴中的形式不安全?

+0

這裏的jsfiddle:https://jsfiddle.net/un55cprk/ – user1131522

回答

0

以$看你可以保持眼睛上的任何NG-模型。例如,如果您有1個圖表,那麼您的年至今,月初至今,季度到目前爲止的下拉列表。 現在說,下拉型號名稱是dateChange 現在你可以保持一個手錶上dateChange所以所以每當有在dateChange更新,$監控功能會知道,然後你可以更新圖表相對於數據到選擇

+0

我知道'$ watch'用於什麼!我想知道'$ watch'不良使用的用例是什麼,它會將您的應用程序打開到XSS攻擊。 – Rachmaninoff

3

$watch表達限制的eval,其中表達是由AngularJS表達解析器解析和針對當前範圍評價的形式。

雖然AngularJS表達式解析器有保障措施,防止任意評估JS代碼與真正的eval,安全隱患仍然可能存在,並且已知的漏洞可以在舊的框架版本中潛在的利用。

這意味着$on.constructor('alert(1)')()表達無法進行評估,並不會產生任何向上的最新版本AngularJS安全威脅。但考慮到$window服務暴露於範圍(其是用於ES6控制器一種常見的做法),$window.alert(1)表達進行評估。

不能構成安全威脅:

$scope.$watch('myValue', function() { 
    console.log($scope.myValue); 
}); 

可以構成安全威脅:

$scope.$watch($scope.myValue, function() { 
    console.log($scope.myValue); 
}); 
+0

感謝您的回答,如果我將'myVar'綁定到文本輸入字段並且用戶輸入了一些javascript,它會導致問題? – Rachmaninoff

+0

它是安全的,只要你做'$腕錶( 'myVar的',...)'和'不看$($ scope.myVar,...)'(這不會有理想的效果任何方式)。 – estus

+0

我們有很多'$腕錶($ scope.myVar,...)的'在我們的應用程序應該怎樣現在? – Rachmaninoff