Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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
使用java脚本API查找和销毁坏的/恶意的java脚本代码_Java_Javascript_Scripting - Fatal编程技术网

使用java脚本API查找和销毁坏的/恶意的java脚本代码

使用java脚本API查找和销毁坏的/恶意的java脚本代码,java,javascript,scripting,Java,Javascript,Scripting,我正在开发一个servlet(在tomcat上运行),它接收包含Java脚本代码的请求,并使用Java脚本API框架评估/运行代码并将答案返回给用户 因为我们处理的是用户生成的代码,所以代码可能是好代码,也可能是坏代码。例如,坏代码可以是while(true);这将无休止地在服务器中循环,占用不必要的资源 我的问题 1) 我怎样才能发现坏代码? 2) 一旦被识别为坏代码/恶意代码,停止运行的最佳方法是什么 谢谢我向您提出的问题:什么算坏代码 如果您不能给出什么算是坏代码的正式定义,那么您就不能指

我正在开发一个servlet(在tomcat上运行),它接收包含Java脚本代码的请求,并使用Java脚本API框架评估/运行代码并将答案返回给用户

因为我们处理的是用户生成的代码,所以代码可能是好代码,也可能是坏代码。例如,坏代码可以是while(true);这将无休止地在服务器中循环,占用不必要的资源

我的问题 1) 我怎样才能发现坏代码? 2) 一旦被识别为坏代码/恶意代码,停止运行的最佳方法是什么


谢谢

我向您提出的问题:什么算坏代码

如果您不能给出什么算是坏代码的正式定义,那么您就不能指望能够检测到它。既然这可能就是你的问题的真正含义,我就提出我的答案——没有办法

即使是一个看似琐碎的事情,如不能提前确定,我希望任何坏代码的定义都是无法终止的

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


否则的话,可以在一个严格的沙箱中运行脚本,如果脚本还没有完成运行,则在适当的时间后终止它。什么是可接受的,这在很大程度上取决于您的环境。

我向您提出的问题:什么是坏代码

如果您不能给出什么算是坏代码的正式定义,那么您就不能指望能够检测到它。既然这可能就是你的问题的真正含义,我就提出我的答案——没有办法

即使是一个看似琐碎的事情,如不能提前确定,我希望任何坏代码的定义都是无法终止的

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


否则的话,可以在一个严格的沙箱中运行脚本,如果脚本还没有完成运行,则在适当的时间后终止它。这在很大程度上取决于你的环境,什么是可以接受的。

已经有一个工具可以识别“坏”的JavaScript。显然,坏代码的定义非常主观,但JSLint提供了广泛的选项,因此您应该能够对其进行配置,使其与坏代码的定义非常接近


您可以通过上面链接的web表单向JSLint提交代码(和配置选项)。还可以通过编程方式将代码(和选项)提交给JSLint,但如果您计划定期提交代码,则应获得作者的许可。

已经有了一个识别“坏”JavaScript的工具。显然,坏代码的定义非常主观,但JSLint提供了广泛的选项,因此您应该能够对其进行配置,使其与坏代码的定义非常接近


您可以通过上面链接的web表单向JSLint提交代码(和配置选项)。还可以通过编程方式将代码(和选项)提交给JSLint,但如果您计划定期提交代码,则应获得作者的许可。

您在这一点上真是一筹莫展。无法提前确定代码是资源密集型代码还是具有邮件目的。即使是人类也很难做到这一点。我已经说过,你可以做一些事情来保护自己

  • 使用Rhino而不是Java6的内置JS脚本引擎,因为它提供了更多选项。
    • 实现监视指令计数的自定义上下文。这使您有机会中断无限循环的脚本。看犀牛的课
    • 在单独的线程中运行脚本,这样就可以中断处于等待状态的脚本,而这些等待状态不会触发上下文的指令计数
    • 实现安全管理器:请参阅。这将允许您将脚本限制为仅与之交互的对象

  • 我已经在中实现了1、2和3,欢迎您偷取

    在这一点上,您真的是跳进了兔子洞。无法提前确定代码是资源密集型代码还是具有邮件目的。即使是人类也很难做到这一点。我已经说过,你可以做一些事情来保护自己

  • 使用Rhino而不是Java6的内置JS脚本引擎,因为它提供了更多选项。
    • 实现监视指令计数的自定义上下文。这使您有机会中断无限循环的脚本。看犀牛的课
    • 在单独的线程中运行脚本,这样就可以中断处于等待状态的脚本,而这些等待状态不会触发上下文的指令计数
    • 实现安全管理器:请参阅。这将允许您将脚本限制为仅与之交互的对象

  • 我已经在中实现了1、2和3,欢迎您偷取

    我如何停止java脚本机制中的无休止循环?导入javax.script.*;公共类EvalScript{public static void main(字符串[]args)引发异常{//创建脚本引擎管理器ScriptEngineManager工厂=新建ScriptEngineManager();//创建JavaScript引擎ScriptEngine引擎=工厂。getEngineByName(“JavaScript”);//从String engine.eval(“while(true);”;}}中评估JavaScript代码如何停止java脚本机制中的无休止循环?导入javax.script.*;公共类EvalScript{public static void main(字符串[]args)引发异常{//创建脚本引擎管理器ScriptEngineManager工厂=新建ScriptEngineManager()//