2012-04-15 10 views
1

私はRuby on Railsアプリケーションを作成しています。ユーザー入力でサーバがコンパイルするJavaコードが生成されます。&が実行されます。 (理由を聞かないでください)RoRで手続き的に生成されたJavaの文字列を消化する

問題は、ユーザーがJavaで文字列リテラルとして使用する必要がある文字列を入力できることです。私は以前に文字をホワイトリストに載せていましたが、このアプローチはユーザーにとって十分な柔軟性を提供していません。ユーザーが文字列を終了し、サーバー上で任意のコードを実行できないようにするには、RoRの文字列をどのようにサニタイズできますか?

答えて

2

ユーザーが違法な文字のUnicodeの文字を入力することができるようJavaで文字列を終了する唯一の方法は"ですが、あなたはUnicodeリテラル\u...をチェックするウィル(Javaのコンパイルが最初に行うことは、Unicodeリテラルの検索ですそれらを正しい文字に置き換えてください)。 "\の両方を許可しないと、Java文字列を終了できません。

String input = "#USER_INPUT#"; 

することができます:あなたは、この入力を使用しているものを言及していないが、安全な方法は、次のJavaクラスへと代わりのようなものをすることの別のファイルにユーザーの入力を保存することです

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()のようなものです:あなたが保存されているユーザ入力ファイルからテキストを読み取ります

このようにして、ユーザーは必要なものを入力することができ、生成されたJavaコードと交差できないユーザー入力との明確な境界があります。

+0

すばらしい答え、ありがとう! – jms301

関連する問題