Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保护允许用户插入JavaScript的应用程序?_Javascript_Security - Fatal编程技术网

如何保护允许用户插入JavaScript的应用程序?

如何保护允许用户插入JavaScript的应用程序?,javascript,security,Javascript,Security,我们有一个位于防火墙和CAS认证层后面的应用程序。它有一个特性,允许具有特殊角色的用户通过编写JavaScript函数来定制应用程序的工作方式,JavaScript函数在运行时插入到应用程序中,并且可以通过按钮单击和页面加载等事件触发。(JS不是“eval”'d-它被写入页面服务器端。) 不用说,此功能会引起安全问题 除了已经采取的措施之外,是否还有其他建议来确保安全性,即a)防火墙、b)健壮的身份验证和c)授权 编辑: 针对评论中的问题: 1.注入的代码是成为应用程序的一部分,还是作为独立的应

我们有一个位于防火墙和CAS认证层后面的应用程序。它有一个特性,允许具有特殊角色的用户通过编写JavaScript函数来定制应用程序的工作方式,JavaScript函数在运行时插入到应用程序中,并且可以通过按钮单击和页面加载等事件触发。(JS不是“eval”'d-它被写入页面服务器端。)

不用说,此功能会引起安全问题

除了已经采取的措施之外,是否还有其他建议来确保安全性,即a)防火墙、b)健壮的身份验证和c)授权

编辑: 针对评论中的问题:
1.注入的代码是成为应用程序的一部分,还是作为独立的应用程序(分离的上下文)执行? 是的,它将成为应用程序的一部分。它当前被插入到服务器端的脚本标记中


  • 插入的JavaScript是否在客户端浏览器上运行,而不是在原始编写器上运行? 对它被持久化,然后被插入到所有未来的请求中
  • (应用程序可以被认为是一个“引擎”,用于针对通过RESTful调用访问的通用后端数据存储构建自定义应用程序。每个自定义应用程序都可以有自己的一组自定义Java脚本)

    您真的不应该只接受任意JavaScript。理想情况下,应该首先对发送的JavaScript进行标记化,并确保每个标记都是有效的JavaScript(这应适用于以下所有场景)

    之后,您应该验证发送的任何JavaScript都不会访问敏感信息。

    最后一部分在模糊代码中可能是非常困难的,甚至是不可能验证的,并且您可能需要考虑,不管您做了多少验证,这都是一种固有的不安全的实践。只要您了解这一点,以下是一些建议,可以使此过程比通常情况下更安全一些:

    • 同样,您也可以限制JavaScript作为应用程序的一部分运行,并像堆栈片段一样在单独的上下文中对其进行沙箱处理

    • 另一个选项是将JavaScript限制为预定义的函数白名单(您可能已经实现了其中的一些函数)和全局函数。当然,除了原语、控制流和用户定义的函数定义之外,不要允许它直接与DOM或全局函数交互。此方法确实有一些成功,这取决于白名单的执行力度

    • 或者,如果您认为这是可能的,那么不要让代码在任何人的机器上运行,而不是代码的原始作者。这基本上是将类似于a的功能移动到应用程序本身(我真的不明白这一点),但这肯定比允许它在任何客户端的浏览器上运行更安全


    注入的代码是成为应用程序的一部分,还是作为独立的应用程序(分离的上下文)执行?插入的JavaScript是否在客户端浏览器(而不是原始编写器)上运行?谢谢。我正在继承应用程序。我们已经讨论了其中的一些方法,尽管已经编写了很多脚本,它们完成了您指出的所有应该避免的事情!不过,您的回答将非常有助于规划未来的发展方向,因此,谢谢您@没问题。根据您的编辑,第二个要点似乎对您的特定案例最有帮助。确保您的白名单不包括
    Object
    String
    之类的内容,因为允许自定义JavaScript修改这些构造函数的行为很可能会使您的白名单无法执行。您还可以向您的团队提到,在加载自定义JavaScript之前将globals修改为不可配置可能会以性能为代价,并且也可能不是很充分的证明。