Javascript 让用户定义角度表达式安全吗?
在我的angular应用程序中,我想让用户定义高级过滤表达式来过滤显示的对象。我在看不同的库,它似乎在做我想做的事情,但它允许的表达式数量可能不足以满足我的目的 我只是想用有角度的表达来代替。我将实例化一个新的angular模块(以确保在我的应用程序中定义的过滤器或rootScope变量不会成为问题),并在其中运行Javascript 让用户定义角度表达式安全吗?,javascript,angularjs,security,Javascript,Angularjs,Security,在我的angular应用程序中,我想让用户定义高级过滤表达式来过滤显示的对象。我在看不同的库,它似乎在做我想做的事情,但它允许的表达式数量可能不足以满足我的目的 我只是想用有角度的表达来代替。我将实例化一个新的angular模块(以确保在我的应用程序中定义的过滤器或rootScope变量不会成为问题),并在其中运行$parse 由于我的用户定义的筛选表达式将保存在应用程序中,并在其他用户打开应用程序时运行,因此在筛选表达式中不能输入有害代码至关重要 因此我的问题是:用户定义角度表达式安全吗?或者
$parse
由于我的用户定义的筛选表达式将保存在应用程序中,并在其他用户打开应用程序时运行,因此在筛选表达式中不能输入有害代码至关重要
因此我的问题是:用户定义角度表达式安全吗?或者他们允许以任何方式做一些有害的事情,比如修改dom、重定向到另一个页面、发出HTTP请求,或者其他我现在想不起来的事情吗?根据协议,用户提供的表达式永远不应该被执行
直到Angular 1.5,表达式都是在沙箱中执行的,以防止糟糕的编程风格(而不是防止安全漏洞)。在Angular的每一个版本中,都找到了逃离沙箱的方法。通过在web上搜索angular sandbox escape
,可以找到许多示例,并且可以找到有关该问题的简短概述
在Angular 1.6中,使用沙盒,因此从表达式运行任意JavaScript应该更容易
因此,让用户定义角度表达式是绝对不安全的。。换句话说:这不是一个好的计划。我不能具体地说Angular,因为我对它不熟悉,但如果你允许你的用户保存代码,然后其他用户暴露在代码中,这本身就是不安全的。假设您的用户怀有敌意、恶意,并且知道如何暴露和利用您演示的系统中的缺陷。也就是说,您不能将其实现为某种API,这样您就可以验证服务器端了。@JoeClay:interest。但我仍然想知道他们是否只是在讨论在模板中使用表达式求值的范围的情况,在这种情况下,我很清楚表达式是如何以不好的方式使用的。在我的例子中,表达式将在一个独立的angular模块中运行,我想知道在这种情况下是否也可以利用表达式。我链接的页面指出,对用户内容调用
$parse
是可利用的(在“将用户提供的内容在调用中生成的表达式传递给解析表达式的服务”下). 听上去,你基本上给了用户在你的站点上运行任意JS的自由支配权。