2009-06-17 6 views
1

Javaで単一引用符をフィルタリングするにはどうすればよいですか?filerering/javaの一重引用符を置き換える

誰かが一重引用符を入力すると、データベースエラーが発生する検索ボックスがあります。

JavaScriptやデータベースレベルでフィールドしたくありません。私はJavaでのみそれをやりたいどうやってやるの?

私は完全にそれを失いたくありません。他の方法はありますか?見積もりを\ '仕事で置き換えますか?

答えて

6

私は間違った角度から問題に近づいていると思います。私はあなたのSQLを次のように構築していると強く思っています:

String sql = "SELECT * FROM TABLE WHERE USERID='" + userInput + "'"; 

または類似のものです。それをしないでください。パラメータ化されたクエリを代わりに使用し、ユーザー入力をパラメータとして指定します。私がこれまで使用してきたすべてのデータベースは、それを処理する方法を知っていて、安全なユーザ入力を処理する方法です。

あなたはは本当に、本当にはちょうどあなたが使用することができ、引用符を取り除きたい場合は、次の

text = text.replace("'", ""); 

...しかし、しないでください。パラメータ化されたクエリを代わりに使用します。データベースが異なるためのルールをエスケープ

String sql = "SELECT * FROM table WHERE USERID = ?"; 
PreparedStatement pstmt = connection.prepareStatement(sql); 
pstmt.setString(1, "O'Connor"); 
ResultSet rs = pstmt.executeQuery(); 

+0

私は冬眠使用していることをやるカントので、私はJavaのitselでフィルタリングをしたいANDNOTデシベルレベル – user93796

+0

で私は完全にそれを失いたくない、他の方法があります。 wilは引用文を\ 'wil workと置き換えますか? – user93796

+1

Hibernateを使用している場合は、これを行う必要はありません。 SQLインジェクションを避けるため(パフォーマンスを向上させるために)、プリペアドステートメント自体を使用します。クエリをどのように実行しようとしているかの例を示すために質問を編集してください。 –

4

はい、PreparedStatement.setString()を使用します。たとえば、Oracleでは、アポストロフィを複製してエスケープすることができます。 MySQLではバックスラッシュ+アポストロフィ(私は思う)です。

だから、どちらかuserInput = userInput.replaceAll("'", "''");userInput = userInput.replaceAll("'", "\\'");

関連する問題