JDBC SQL注入 戀天小結

2021-10-08 23:01:46 字數 1830 閱讀 2838

所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。

具體來說,它是利用現有應用程式,將(惡意的)sql命令注入到後台資料 庫引擎執行的能力,它可以通過在web表單中輸入(惡意)sql語句得到乙個存在安全漏洞的**上的資料庫,而不是按照設計者意圖去執行sql語句。

先模擬應用場景

匯入示例資料

drop table if existst_user;

create tablet_user(

idint(11) not null auto_increment,

usernamevarchar(255) not null,

passwordvarchar(255) not null,

primary key (id)

) engine=innodb auto_increment=4 default charset=utf8;

insert intot_uservalues (『1』, 『admin』, 『admin』);

insert intot_uservalues (『2』, 『root』, 『root』);

insert intot_uservalues (『3』, 『zrz』, 『123』);

建立user實體類

建立iuserdao介面

提供乙個登入和更新密碼的功能

使用statement技術實現iuserdao介面

public

class

userdao_statement

implements

iuserdao

else

}catch

(exception e)

}@override

public

void

updatepwd

(user user, string newpwd)

catch

(exception e)

}}

測試test

其實就是利用or和單引號來更改username和password的判斷範圍,正常來說,username和passname都是一對一的關係,一致就是成功,不一致就不成功,但是,如果在username和passname中加了or 就會更改判斷範圍 , 就像上面**裡的一樣,加了 「or」 1=1

就相當於加了 or true,這樣無論輸入什麼都可以登入成功 ,因為你輸入任何東西系統都以為你是true 就都會登入成功。

解決辦法

就是利用prepadstatement 代替 statement ,二者功能相差不多,但是prepardstatement可以轉義單引號,可以很好的避免用單引號佔位的問題,prepardstatement在之前的文章中提到了,這裡就不詳細說了。

JDBC SQL注入

sql注入,preparedstatement和statement 在sql中包含特殊字元或sql的關鍵字 如 or 1 or 時statement將出現不可預料的結果 出現異常或查詢的結果不正確 可用preparedstatement來解決。preperedstatement 從statement...

JDBC SQL注入問題

當用 name 作為引數時 如果名字裡面含有 or 等帶有歧義的情況時,或導致錯誤。比如 string name or 1 or 將導致全部的記錄都會被輸出。這種錯誤叫做 sql注入。我們需要將過濾的工作交給資料庫來處理。即 preparedstatement ps.例子如下 preparedsta...

CSS外觀屬性 戀天小結

color屬性用於定義文字的顏色,其取值方式有如下3種 1.預定義的顏色值,如red,green,blue等。2.十六進製制,如 ff0000,ff6600,29d794等。實際工作中,十六進製制是最常用的定義顏色的方式。3.rgb 如紅色可以表示為rgb 255,0,0 或rgb 100 0 0 ...