使用Java脚本API寻找并摧毁坏的/恶意的Java脚本代码

我工作的一个servlet(在Tomcat上运行),其接收请求包含Java脚本代码,并使用Java脚本API框架评估/运行代码,然后返回答案给用户。

由于我们处理的是用户生成的代码,该代码可以是一个很好的代码,它可以是坏的代码。 作为一个不好的代码的一个例子可以是同时(真); 这将无休止地循环,在服务器承担不必要的资源

我的问题

1)我如何能发现一个不好的代码? 2)一旦确定是一个坏/恶意代码究竟是停止运行的最好方法是什么?

谢谢

--------------解决方案-------------

我的问题给你: 怎样才算糟糕的代码?

如果你不能拿出什么才算是恶意代码的正式定义,你不能希望能够检测到它。 而且,由于这可能是你的问题的真正的意思,我会提出我的答案 - 有没有办法做到这一点。

即使是看似微不足道的小事,如程序是否将终止与否无法提前确定的,而我期望的不良代码的任何定义应该是东西,可能不会终止。

因此,在我看来,你有一个重大的选择:信任你的用户(或者不信任他们,不运行任何东西)。

一些可能的工作 ,否则是要以严格的沙箱中运行的脚本,并经过适当的时间量终止它,如果它尚未运行完毕。 这在很大程度上取决于你的情况,什么是可以接受的。

你真的跳下就这一个兔子洞。 有没有办法提前判断是否代码是资源密集型的,或有mailious意图。 甚至人类也很难与这一点。 尽管如此,有一些事情可以做,以保护自己。

  1. 用犀牛代替了Java 6内置的JS脚本引擎,它为您提供了更多的选择。
  2. 实现自定义的背景下,监控指令数。 这给你一个机会,中断被无限循环的脚本。 见犀牛的ContextFactory类
  3. 在一个单独的线程中运行脚本,让你可以中断陷在等待状态脚本不触发Context的intruction数
  4. 实施安全管理器:请参阅概述,API。 这将允许您限制脚本只是那些它应当与交互的对象。

我在八哥实施1,2和3,欢迎大家来偷码

目前已经是一个标识“坏”的JavaScript,JSLint的工具。 很明显的错误代码的定义是非常主观的,但JSLint的提供了广泛的选择,所以你应该能够将其配置为相当紧密地贴合你的坏定义。

您可以通过网络的形式链接到上述提交的代码(和配置选项),以JSLint的。 这也应尽可能提交代码(选项)来的JSLint编程,但如果你打算经常这样做,你应该得到作者的许可。

分类:java的 时间:2015-03-15 人气:0
本文关键词: JavaScript中,脚本,JAVA
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.192 (s). 10 q(s)