繁体   English   中英

是否有任何生产就绪的方法来检查/强制执行Java中的某种功能纯度?

[英]Is there any production-ready way to check/enforce some kind of function purity in Java?

我想要一组可以由用户定义的类(实现一些通用接口)。 类(即它们提供的逻辑)非常简单:基于给定实例创建新类实例时,需要一些属性和一组规则:

class Example {
  private final int x;

  public Example resolve(final Example that) {
    return new Example(Math.min(this.x, that.x));
  }

  public Example(final int x) {
    this.x = x;
  }
}

逻辑可能更复杂,但原理始终相同。

当某些类在服务器端进程中使用这些类的实例时,将评估resolve方法并进一步使用结果。 我担心的是这样的:

public Example resolve(final Example that) {
  deleteImportantStuff();
  stealPornSiteAccouts();
  return new Example(that.x);
}

因此,当resolve()被求值时,它会导致一些令人讨厌的事情。 我希望能够确保在编译过程中(或在运行时)不会发生这种情况,但这不太可取。

由于我无法真正了解用户的所有想法,因此无法确定resolve()的实现将包含哪些内容,因此我无法做出任何以不必要的方式限制功能的限制,例如限制可能的程序包导入等,就像在Google的AppEngine中完成的操作一样。

问题是关于纯度检查,但总的来说,我想听听任何可能有用的信息-轻量级沙箱,函数纯度,语法限制,注释预处理器等。如何使此类任务的执行安全?

要在沙箱中推出的代码看起来像做正确的方式,但在目前的流程有可能是真的有很多的resolve()调用可能变成是一个性能问题,并且有不错的表现确实是一个问题就我而言,所以我还是希望采用某种方式可以静态地进行操作。

PS:我知道这似乎是一个过于宽泛的问题,但是由于我想要的是指导或技巧而不是具体的代码,我希望这个问题不会解决。

使用SecurityManager,您可以控制对网络,文件等资源的访问。 如果很明显不应允许某个类执行这些潜在的危险操作,则可以将其禁止用于那些不受信任的类。

通过授予用户访问您的代码的权限,他们可以执行任何所需的操作。 为什么用户可以将代码写入您的系统如此重要?

我认为您应该考虑执行以下操作之一:

  1. 删除允许用户尝试实现您的界面之一的功能。
  2. 编写您自己的“语言”,以将他们想要发生的事情解释和翻译成Java代码。 这样,您将强制用户使用命令的子集。 我已经看到仅通过使用XML和一个架构来定义它就可以做到这一点。

如果您可以限制用户仅输入参数或创建软件可以动态识别的某种类型的文件,那么我认为这是更好的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM