Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RoR中程序生成java的清理字符串_Java_Ruby_Ruby On Rails 3_Sanitization_Input Sanitization - Fatal编程技术网

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

RoR中程序生成java的清理字符串,java,ruby,ruby-on-rails-3,sanitization,input-sanitization,Java,Ruby,Ruby On Rails 3,Sanitization,Input Sanitization,我正在编写一个RubyonRails应用程序,通过用户输入将生成一些Java代码,然后服务器将编译并执行这些代码。(不要问为什么;) 问题是用户能够输入字符串,这些字符串需要在Java中用作字符串文本。我以前是白名单的字符,但这种方法是提供不够的灵活性,为用户。如何清理RoR中的字符串,以防止用户终止字符串,从而能够在服务器上执行任意代码。在java中终止字符串的唯一方法是“,但您还需要检查Unicode文本\u…,因为用户可以输入非法字符的Unicode字符(java编译器要做的第一件事是搜索

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


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

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

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

String input = "#USER_INPUT#";
public String readUserInputFile() {
    InputStream is = this.class.getClassloader.getResourceAsStream("user-input.txt");
    StringBuffer text = new StringBuffer();
    // read input stream into text
    return text.toString();
}
您可以从保存的用户输入文件中读取文本:

String input = readUserInputFile();
readUserInputFile()
类似于:

String input = "#USER_INPUT#";
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代码和用户输入之间有一个无法跨越的清晰边界