在RoR中清理程序生成的java的字符串

时间:2012-04-15 20:28:46

标签: java ruby ruby-on-rails-3 sanitization input-sanitization

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

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

1 个答案:

答案 0 :(得分:2)

在java中终止字符串的唯一方法是",但是你也想检查Unicode文字\u...,因为用户可以输入非法字符的Unicode字符(java的第一个东西) compile确实是搜索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代码与无法跨越的用户输入之间存在明确的界限。