算法博彩游戏

时间:2015-07-30 06:59:08

标签: java security java-8

我目前正在考虑制作足球博彩游戏,用户必须通过提交算法来预测结果。

提交算法意味着实现一个接口(如下所示,我必须详细考虑):

public interface Bet
{
  public Result makePrediction(Matchday m, History h, ...);
}

但是如果用户有可能自己实现一个接口,他们几乎可以做所有事情,这是一个安全问题。 现在我已经看到了Java 8引入的新功能特性。 目前,我考虑让用户提供一个lambda函数,从上面“实现”接口,但缩小了可能性。

可能的用户输入是:

(Matchday m, History h, ...) 
  // apply algorithm
  -> {return f(m,h,...);}

我将解析它并将其添加到我的程序中。我现在的问题是:

  1. 提供lambda函数是否仅限制了提供完整实现接口所给出的可能性?
  2. 这仍然是一个安全问题吗?我是否必须编写自己的编译器以限制其他内容?

1 个答案:

答案 0 :(得分:4)

限制用户对lambdas的输入无法解决问题。 lambda主体仍然可以包含您想要的任何Java代码。您甚至可以在lambda体内定义新类。从了解Java SecurityManager到在沙盒虚拟机(如KVM)中运行用户代码,有多种方法可以解决您的问题。