JDBC学習の道(三)SQL注入防止,PreparedStatement探索
今登录して登录してあるいはその他の多くの地方はユーザーの入力の内容に出会って直接データベースの内部に持って行ってSQL文を実行することができて、これは1种のとても危険な运动で、あなたがユーザーが何を入力することができることを知らないため、もしユーザーはSQL文に対してとても熟知しているならば、彼は入力する时に“2つの冒号をプラスして特殊な文字として、これにより、コンピュータがSQL文のキーワードを入力したと判断してSQL文を変更し、計り知れない損失を計上することができます.このようなことを防止するコードを紹介します.
1.PreparedStatementはStatementから受け継がれており、Statementができることは彼ができると言える.
2.PreparedStatementは、入力したSQL文を前処理し、特殊な文字や危険を削除することができます.
文字、非常に有益で、開発者に助けを与えます
3.PreparedStatementはSQLの実行を最適化して、何度も大量のSQLクエリに対して、効率はStatementよりずっと速くて、それを使うことができることを提案して彼を使います
package com.bird.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/**
* @use1 preparedStatement , ,
* @use2 Statement
* @use3 , PreparedStatement
* @author bird
*
*/
public class SQLInsert {// PreStatement SQL
public static void read(String num) throws Exception{
Connection conn = null;
PreparedStatement pt = null;
ResultSet rs = null;
try{
conn = JdbcUtil.getConnecttion();//
String sql = "select * from niao where password = ?";// num
pt = conn.prepareStatement(sql);//
pt.setString(1, num);
rs = pt.executeQuery();//
while(rs.next()){//
System.out.println(rs.getObject("username")+"\t"+rs.getObject("password")+"\t"+rs.getObject("keywords")+"\t"
+rs.getObject("userkeywords1")+"\t"+rs.getObject("time1")+"\t"+rs.getObject("userkeywords2")+"\t"
+rs.getObject("time2")+"\t");
}
}finally{
JdbcUtil.free(rs, pt, conn);
}
}
public static void main(String [] args) throws Exception{
read("123");
//read("' or 2 or'"); , SQL
}
}
1.PreparedStatementはStatementから受け継がれており、Statementができることは彼ができると言える.
2.PreparedStatementは、入力したSQL文を前処理し、特殊な文字や危険を削除することができます.
文字、非常に有益で、開発者に助けを与えます
3.PreparedStatementはSQLの実行を最適化して、何度も大量のSQLクエリに対して、効率はStatementよりずっと速くて、それを使うことができることを提案して彼を使います