如何保护允许用户插入JavaScript的应用程序?
我们有一个位于防火墙和CAS认证层后面的应用程序。它有一个特性,允许具有特殊角色的用户通过编写JavaScript函数来定制应用程序的工作方式,JavaScript函数在运行时插入到应用程序中,并且可以通过按钮单击和页面加载等事件触发。(JS不是“eval”'d-它被写入页面服务器端。) 不用说,此功能会引起安全问题 除了已经采取的措施之外,是否还有其他建议来确保安全性,即a)防火墙、b)健壮的身份验证和c)授权 编辑: 针对评论中的问题:如何保护允许用户插入JavaScript的应用程序?,javascript,security,Javascript,Security,我们有一个位于防火墙和CAS认证层后面的应用程序。它有一个特性,允许具有特殊角色的用户通过编写JavaScript函数来定制应用程序的工作方式,JavaScript函数在运行时插入到应用程序中,并且可以通过按钮单击和页面加载等事件触发。(JS不是“eval”'d-它被写入页面服务器端。) 不用说,此功能会引起安全问题 除了已经采取的措施之外,是否还有其他建议来确保安全性,即a)防火墙、b)健壮的身份验证和c)授权 编辑: 针对评论中的问题: 1.注入的代码是成为应用程序的一部分,还是作为独立的应
1.注入的代码是成为应用程序的一部分,还是作为独立的应用程序(分离的上下文)执行? 是的,它将成为应用程序的一部分。它当前被插入到服务器端的脚本标记中
最后一部分在模糊代码中可能是非常困难的,甚至是不可能验证的,并且您可能需要考虑,不管您做了多少验证,这都是一种固有的不安全的实践。只要您了解这一点,以下是一些建议,可以使此过程比通常情况下更安全一些:
- 同样,您也可以限制JavaScript作为应用程序的一部分运行,并像堆栈片段一样在单独的上下文中对其进行沙箱处理
- 另一个选项是将JavaScript限制为预定义的函数白名单(您可能已经实现了其中的一些函数)和全局函数。当然,除了原语、控制流和用户定义的函数定义之外,不要允许它直接与DOM或全局函数交互。此方法确实有一些成功,这取决于白名单的执行力度
- 或者,如果您认为这是可能的,那么不要让代码在任何人的机器上运行,而不是代码的原始作者。这基本上是将类似于a的功能移动到应用程序本身(我真的不明白这一点),但这肯定比允许它在任何客户端的浏览器上运行更安全
Object
和String
之类的内容,因为允许自定义JavaScript修改这些构造函数的行为很可能会使您的白名单无法执行。您还可以向您的团队提到,在加载自定义JavaScript之前将globals修改为不可配置可能会以性能为代价,并且也可能不是很充分的证明。