1

ユーザー入力により、サーバーがコンパイルして実行するJavaコードを生成するRuby on Railsアプリを作成しています。(理由は聞かないでください;)

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

4

1 に答える 1

2

Java で文字列を終了する唯一の方法は ですが"、ユーザーが不正な文字の Unicode 文字を入力する可能性があるため、Unicode リテラルもチェックする必要があります\u...(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 に答える