MySQL約束攻擊的原理和復現(xiàn)方式
MySQL約束攻擊的原理和復現(xiàn)
在MySQL數(shù)據(jù)庫中,數(shù)據(jù)是有字符長度限制的。
對于下面這個數(shù)據(jù)庫:

username和password的限制都是設置為15個字符。
當嘗試注冊一個超過15字的字符串時,系統(tǒng)就會報錯。

這是由于在MySQL環(huán)境變量sql_mode中添加了STRICT_TRANS_TABLES字樣,規(guī)定了嚴格模式。
但如果有些數(shù)據(jù)庫沒有設置嚴格模式,系統(tǒng)就會對輸入的非法字符串進行轉換,
出現(xiàn)了SQL約束攻擊
在SQL注冊的時候,是不能夠注冊已經(jīng)存在的用戶名的(即使在后面加空格也不可以),但是可以考慮創(chuàng)建一個名字叫‘admin 1’的超長字符串用戶,在SQL比對時,它顯然是和admin不同的(因為末尾有一個1,所以空格是有效的),但是在非嚴格模式下,SQL會去掉后面多余的字符,將“admin ”注冊到用戶中,
數(shù)據(jù)庫就變成了這樣:

發(fā)現(xiàn)數(shù)據(jù)庫中出現(xiàn)了兩個admin,然后再使用admin、mypass登陸,由于比對的時候,末尾的空格是被忽略掉的,所以就成功登入了admin。

總結
如有錯誤或未考慮完全的地方,望不吝賜教
相關文章
mysql啟動失敗之mysql服務無法啟動(服務沒有報告任何錯誤)的解決方法
作為一名程序猿,必不可少的便是和mysql打交道,那當mysql故障,服務無法啟動時該怎么解決呢,下面這篇文章主要給大家介紹了關于mysql啟動失敗之mysql服務無法啟動,服務沒有報告任何錯誤的解決方法,需要的朋友可以參考下2022-05-05
mysql批量替換數(shù)據(jù)庫中某字段部分內容兩種方法
MySQL數(shù)據(jù)庫批量替換是指在數(shù)據(jù)庫中批量更新或替換特定的數(shù)據(jù)內容,這篇文章主要介紹了mysql批量替換數(shù)據(jù)庫中某字段部分內容的兩種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-11-11
mysql 5.6.26 winx64安裝配置圖文教程(一)
這篇文章主要為大家詳細介紹了mysql 5.6.26 winx64安裝配置圖文教程,感興趣的小伙伴們可以參考一下2016-08-08
MySQL數(shù)據(jù)庫恢復(使用mysqlbinlog命令)
binlog是通過記錄二進制文件方式來備份數(shù)據(jù),然后在從二進制文件將數(shù)據(jù)恢復到某一時段或某一操作點。2011-08-08

