RoR中程序生成java的清理字符串
我正在编写一个RubyonRails应用程序,通过用户输入将生成一些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编译器要做的第一件事是搜索
问题是用户能够输入字符串,这些字符串需要在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代码和用户输入之间有一个无法跨越的清晰边界