1

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

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

4

1 回答 1

2

在 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 代码和用户输入之间有一个明确的界限,这是无法跨越的。

于 2012-04-15T20:37:15.180 回答