我正在处理一个servlet(在tomcat上运行),它接收包含Java Script代码的请求,并使用java脚本API框架评估/运行代码并将答案返回给用户。
由于我们正在处理用户生成的代码,因此代码可能是一个很好的代码,也可能是错误的代码。作为一个坏代码的例子可以是while(true);这将无休止地在服务器中循环,占用不必要的资源
1)我怎么能发现一个糟糕的代码? 2)一旦被识别为坏/恶意代码,停止运行的最佳方法是什么?
感谢
答案 0 :(得分:7)
我的问题是:什么算不好代码?
如果你不能提出正确定义什么算不好的代码,你就不能希望能够检测到它。既然这可能是你的问题的真正含义,我会提出我的答案 - 没有办法做到这一点。
即使像whether a program will terminate or not这样看似微不足道的事情也无法提前确定,我预计任何坏代码的定义都会无法终止。
因此,在我看来,你有一个主要的选择:信任你的用户(或者不信任他们,也不要运行任何东西)。
可能工作的东西是在严格的沙箱中运行脚本,如果它还没有完成运行,则在适当的时间后终止它。这在很大程度上取决于你的情况是什么是可以接受的。
答案 1 :(得分:3)
你真的在这个兔子洞里跳了下来。如果代码是资源密集型或具有邮件意图,则无法提前确定。即便是人类也很难。说过你可以采取一些措施来保护自己。
答案 2 :(得分:1)
已经有一个识别“糟糕”JavaScript的工具JSLint。显然,坏代码的定义非常主观,但JSLint提供了广泛的选项,因此您应该能够将其配置为与您的错误定义非常接近。
您可以通过链接到上面的Web表单向JSLint提交代码(和配置选项)。也应该可以以编程方式向JSLint提交代码(和选项),但如果您打算定期执行此操作,则应获得作者的许可。