我正在构建一个应用程序,其中用户生成的 javascript 函数存储在数据库中,并作为回报提供给许多其他用户。脚本必须由具有管理员权限的人验证(应该是可信任的 - 但它们是由用户自己选择的,因此似乎需要进行某种验证)
将要执行的函数主要用于计算目的 - 不需要访问 DOM 或(至少此时)任何全局对象。
假设用户定义了一个计算字符串单词的函数(作为一个简单的例子)。
我目前的方法是将函数包装在一个闭包中,传递一个带有输入属性的对象并在其中定义一个本地 var 窗口以使这个全局对象不可访问(显然这还不够 - 遍历窗口的所有属性对象并在本地定义它们可能是一种可能性,但作为回报可能会破坏一些重要的功能,这还不够)
下一个想法是将函数包装在 ADsave 调用中,以防止可能有害的功能(以及对全局范围的访问),但这需要通过 JSLint / adsave 选项即时验证代码(而且我只是找不到任何关于如何做到这一点的材料......!)
下一个方法是使用 Caja 之类的东西(实际上这将消除轻松添加新功能的可能性,因为 javascript 代码必须“转换”为代码的 Caja 版本(这不能由我自己的应用程序在-苍蝇)。
因为每当从服务器返回时(不仅仅是在客户端上创建它们时)我都必须验证这些函数,所以 ADsave 似乎是迄今为止最好的解决方案
有没有人有解决上述问题的方法(或者可能是更好的解决方案——我的意思是,以安全的方式执行第三方 jscript(从某些数据库提供)现在应该是一项相当普遍的任务。