什麼是SQL注入以及如何防止SQL注入

2021-09-25 11:07:08 字數 1948 閱讀 4560

case 1 :

模擬使用者登陸案例

(1)準備資料

use jt_db; 

create table user(

id int primary key auto_increment,

username varchar(50),

password varchar(50)

); insert into user values(null,'張三','123');

insert into user values(null,'李四','234');

(2)建立loginuser 類,提供 main 方法 和 login 方法。

public class loginuser 

/*** 根據使用者名稱和密碼查詢使用者資訊

* @param username

* @param password

*/private static void login(string username, string password) else

}catch(exception e)finally

}}

執行時,輸入:

或輸入

通過上面的案例,我們發現在執行時,不輸入密碼只輸入使用者名稱也可以登陸成功。這就是sql注入攻擊。

sql注入攻擊產生的原因:由於後台的sql語句是拼接而來的。其中的引數是由使用者提交的,如果使用者在提交引數時,在其中摻雜了一些sql關鍵字或者特殊符號(比如,or # --),就可能會導致sql語句的語意發生變化。從而執行一些意外的操作(在不知道密碼的情況下也能登陸,甚至在不知道使用者名稱和密碼的情況下也能登陸),這就是sql注入攻擊。

產生sql注入攻擊的原因在於,statement傳輸器在傳送sql到資料庫執行時,是直接將sql語句和引數拼接在一起,如果引數中有關鍵字或者特殊符號,就會導致sql語句的語義被修改,導致意外的發生。

1.如果要解決sql注入攻擊,可以對使用者提交的引數進行校驗(比如採用正規表示式進行校驗,該方法不推薦,原因**繁瑣。)

2.如何防止sql注入攻擊?

使用preparedstatement物件來替代statement物件。

新增loginbypreparedsatement方法,在方法中,使用preparedstatement來代替statement作為傳輸器物件使用!(推薦使用該方法,操作方便)

**:

public class loginuser2 

/*** 根據使用者名稱和密碼查詢使用者資訊

再次執行程式,按照上面的操作登入。此時,已經成功的防止了sql注入攻擊問題了。

使用preparedstatement物件可以防止sql注入攻擊

而且通過方法設定引數更加的方便且不易出錯!

還可以從某些方面提高程式執行的效率!

什麼是sql注入 如何防止sql注入

sql注入 利用現有應用程式,將 惡意 的sql命令注入到後台資料庫執行一些惡意的操作 造成sql注入的原因是因為程式沒有有效過濾使用者的輸入,使攻擊者成功的向伺服器提交惡意的sql查詢 程式在接收後錯誤的將攻擊者的輸入作為查詢語句的一部分執行,導致原始的查詢邏輯被改變,額外的執行了攻擊者精心構造的...

什麼是sql注入,如何防止sql注入漏洞攻擊

使用者根據系統的程式構造非法的引數從而導致程式執行不是程式設計師期望的惡意sql 語句。使用引數化或儲存過程的sql 就可以避免 sql注入。以登入為例,假如登入語句是string sql select count user.id from sys user user where user.user...

什麼是sql注入,怎麼防止SQL注入?

防止sql注入 什麼是sql注入?如何防止sql注入?sql語句引數化 防止sql注入的示例 from pymysql import connect def main find name input 請輸 物品名稱 建立connection連線 conn connect host localhost...