所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。
具體來說,它是利用現有應用程式,將(惡意的)sql命令注入到後台資料 庫引擎執行的能力,它可以通過在web表單中輸入(惡意)sql語句得到乙個存在安全漏洞的**上的資料庫,而不是按照設計者意圖去執行sql語句。
先模擬應用場景
匯入示例資料
drop table if existst_user
;
create tablet_user
(
id
int(11) not null auto_increment,
username
varchar(255) not null,
password
varchar(255) not null,
primary key (id
)
) engine=innodb auto_increment=4 default charset=utf8;
insert intot_user
values (『1』, 『admin』, 『admin』);
insert intot_user
values (『2』, 『root』, 『root』);
insert intot_user
values (『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 ...