2016-11-14 21 views
0

私はStatementとplain Stringを使っているとプログラミングが悪いことを知っています.SQL注入を避けるためにpreparedStatementを使う必要があります。 しかし、文字列を作成してStringをpreparedStatementに入れることはできますか?これはStatementを使うのと同じですか?例えばpreparedstatementに文字列を入れてください

:あなたはps.setStringを使用することができます

String sql = "SELECT * FROM users WHERE user_ID = ?"; 

preparedStatement = connection.prepareStatement(sql); 

preparedStatement.setLong(1, userId); 
+0

あなたが求めているものは不明である、と私はどのようにコードが表示されませんあなたの質問が示されています。 –

答えて

2

、それは生Stringクエリを使用するのと同じではありません。 PreparedStatementは、データベースに送信する前に文字をエスケープすることが保証されており、クエリはSQLインジェクション攻撃から免除されるはずです(とにかくStringから)。

0

アイデアだけではなく、罰金このような場合には、次のような作品をあなたのSQLコマンドを構築するのであるとして、あなたのPreparedStatementへの入力として与えられたパラメータを使用することです:

PreparedStatement ps = connection.prepareStatement(sql); 
ps.setString(`INPUT PARAMETER`); 

あなたが遵守されない場合はこれは、文字列の連結を終了させるため、SQLインジェクション攻撃に対して依然として脆弱です。

良いが、これらのリンクされているこのトピックの読み込み:

  1. How can prepared statements protect from SQL injection attacks?
  2. http://javarevisited.blogspot.in/2012/03/why-use-preparedstatement-in-java-jdbc.html
  3. How does a PreparedStatement avoid or prevent SQL injection?
関連する問題