共計 1353 個字符,預計需要花費 4 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下 SQL 注入指的是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
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 可以避免注入攻擊;
以上是“SQL 注入指的是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節