2016-12-28 41 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