我正在编写一个Ruby on Rails应用程序,该应用程序通过用户输入将生成一些Java代码,然后服务器将对其进行编译和执行。 (不要问为什么;)

问题是用户能够输入需要在Java中用作字符串文字的字符串。我以前将角色列入白名单,但是这种方法无法为用户提供足够的灵活性。我如何在RoR中清除字符串,以防止用户终止字符串,从而能够在服务器上执行任意代码。

最佳答案

在Java中终止字符串的唯一方法是",但是您还需要检查Unicode文字\u...,因为用户可以输入非法字符的Unicode字符(Java编译的第一件事是搜索Unicode文字)并用正确的字符替换它们)。如果同时禁止"\,则不应终止Java字符串。

您没有提到使用此输入的目的,但是更安全的方法是将用户输入保存到Java类旁边的单独文件中,而不是执行以下操作:

String input = "#USER_INPUT#";


您可以从保存的用户输入文件中读取文本:

String input = readUserInputFile();


readUserInputFile()类似于:

public String readUserInputFile() {
    InputStream is = this.class.getClassloader.getResourceAsStream("user-input.txt");
    StringBuffer text = new StringBuffer();
    // read input stream into text
    return text.toString();
}


这样,用户可以输入他们想要的任何内容,并且在生成的Java代码和用户输入之间存在明确的界限,无法跨越。

关于java - 在RoR中为程序生成的Java清理字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10165783/

10-13 06:37
查看更多