我正在考虑允许用户输入 JavaScript 以在我的应用程序中指定一些逻辑。JavaScript 将被输入并显示在浏览器中,但它会被保存并首先在服务器端进行验证。
这带来了明显的安全隐患。
理想情况下,我只想允许 JavaScript 语言的一个子集。直观地说,选择加入方法 - 指定允许的内容,并禁止其他所有内容 - 似乎比选择退出方法 - 指定不允许的内容更安全。
我见过的很多解决方案都是客户端的——我认为服务器端的解决方案更适合我的需求,因为如果 JavaScript 无效,我可以向用户提供反馈,并且只在服务器上保存一次它是“干净的”。
放置一些东西来解析 JavaScript 并执行一些检查也很有用 - 例如,我会向用户提供一些变量,我想检查他们没有使用任何未初始化的变量,或者代码以预期的格式返回一些东西。沙盒解决方案至少应该不会阻碍这一点,但它可能会积极提供帮助 - 如果它通过解析代码而不仅仅是正则表达式来工作,并且我可以放入自己的钩子来检查一些语法。
Google Caja 看起来可以做我想做的事,但我并没有深入研究它。
你会推荐什么方法?
开源解决方案很棒。我不介意编写自己的代码,但这似乎是一个从头开始正确解决的重要问题。