SQL注入
1.什么是SQL注入
看一下下面的案例场景,这是一般状况下的上岸场景:
而当我们运用 用户名‘:– 的时刻,暗码随意输入也能够上岸胜利↓
这时刻对照两条sql就可以发明,实在用户经由过程在用户名写入的sql标记将内部sql提前结束,而且将后半句检索前提解释起来到达免暗码上岸结果。
sql注入就是原本我只要我能操纵数据库,原本只是让你输入内容就走,而你却输入敕令,从而在我不知情下操纵数据库
2.破绽的修复
会发生上门面的状况是由于上面的sql是运用动态拼接的体式格局,所以sql传入的体式格局能够转变sql的语义。
动态拼接就是在java中java变量和sql语句夹杂运用:select * from user where userName=’”+userName+”’ and password = ‘”+password”’
所以要运用preparedStatement的参数化sql,经由过程先肯定语义,再传入参数,就不会由于传入的参数转变sql的语义。(经由过程setInt,setString,setBoolean传入参数)
3.参数化sql运用案例
//竖立数据衔接 conn=ds.getConnection(); //1.设置prepareStatement带占位符的sql语句 PreparedStatement ptmt = conn.prepareStatement("select * from user where userName = ? and password = ?"); ptmt.setString(1, "张三"); //2.设置参数 ptmt.setString(2, "123456"); rs=ptmt.executeQuery(); while(rs.next()){ System.out.println("上岸胜利"); return; } System.out.println("上岸失利");
参数化特征:
1.设置preparedStatement带占位符的sql语句
statement实行sql语句的体式格局:
stmt=conn.createStatement(); rs=stmt.executeQuery("select userName from user");
2.设置参数
PerparedStatement继续于Statement,这里重要运用的使他参数化sql的特征。
转:https://blog.csdn.net/qq_30258957/article/details/78145885
加:1.都是用来实行SQL的 PreparedStatement extends Statement;
2.Statement合适实行静态(无前提)SQL PreparedStatement合适实行动态(有前提)SQL;
3.PreparedStatement能够防止注入进击;
相干文章:
一个自认为很平安的PHP防SQL注入 求破解
深切相识SQL注入和预防措施
相干视频:
防备sql注入-PHP实战商城开辟视频教
以上就是什么是SQL注入?带你从零开始熟悉SQL注入的细致内容,更多请关注ki4网别的相干文章!