首頁  >  文章  >  資料庫  >  什麼是SQL注入?帶你從零開始認識SQL注入

什麼是SQL注入?帶你從零開始認識SQL注入

php是最好的语言
php是最好的语言原創
2018-07-26 17:52:572787瀏覽

從零開始認識SQL注入 ,什麼是SQL注入? sql注入就是本來我只有我能操作資料庫,本來只是讓你輸入內容就走,而你卻輸入指令,從而在我不知情下操作資料庫

SQL注入

1.什麼是SQL注入

  • 看一下下面的案例場景,這是正常情況下的登陸場景:

什麼是SQL注入?帶你從零開始認識SQL注入

  • 而當我們使用使用者名稱':– 的時候,密碼隨便輸入也可以登陸成功↓

什麼是SQL注入?帶你從零開始認識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注入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn