0

という名前のフィールドを持つ jsp フォームがありますDescription。このフィールドは次のように宣言されています

<input type="text" name="description">

この値は、SQL クエリを構成するために使用されます。

select * from Engines where description like '% (Value from the field)%'

ユーザーが英数字を入力すると正常に動作しますが、一重引用符記号などの特殊文字を入力すると失敗します。'

私の質問:

  1. サーバー側でこれを処理するにはどうすればよいですか
  2. JavaScript で実装する必要がある場合、どの文字を除外する必要がありますか?

ありがとうございました。

4

4 に答える 4

3

SQLクエリ文字列を作成する代わりに、プリペアドステートメントを使用します。あなたの方法はSQLインジェクション攻撃に対して脆弱です。

PreparedStatementsを使用できない場合は、このフィールド値をSQLクエリに渡す前に、Java正規表現を使用して特殊文字を削除してください。

このタスクに関連する投稿があります。

特別な記号を除外するためにjavascriptを使用しないでください。SQLインジェクション攻撃からあなたを保護することはできません。攻撃者は、JavaScriptを検証せずに自分のフォームを偽造し、サーバーを攻撃する可能性があります。

于 2012-04-26T13:01:55.917 に答える
1

この種の問題を処理するには、パラメーター化されたクエリを使用します。

于 2012-04-26T12:56:19.020 に答える
0

あなたがすることは非常に悪い習慣と見なされ、非常に悪い結果をもたらす可能性があります... http://en.wikipedia.org/wiki/SQL_injection

于 2012-04-26T12:58:47.273 に答える
0

JavaScript と Regex を使用した基本的な検証により、無効な文字を削除できます。

<script type="text/javascript">
var str= document.getElementById('mySearch').value;
str=str.replace(/[^A-Za-z0-9]/g,'');
alert(str);
</script>

しかし、私は hkutluay に同意します。パラメータ化されたクエリがより良いルートになるでしょう。

于 2012-04-26T13:03:33.340 に答える