MySQL長字符截?cái)嗟膶?shí)現(xiàn)示例
MySQL超長字符截?cái)嘤置?quot;SQL-Column-Truncation",是安全研究者Stefan Esser在2008 年8月提出的。
在MySQL中的一個設(shè)置里有一個sql_mode選項(xiàng),當(dāng)sql_mode設(shè)置為default時(shí),即沒有開啟STRICT_ALL_TABLES選項(xiàng)時(shí)(MySQLsql_mode默認(rèn)即default),MySQL對插入超長的值只會提示warning,而不是error,這樣就可能會導(dǎo)致一些截?cái)鄦栴}。
新建一張表測試,表結(jié)構(gòu)如下(MySQL5.1):
CREATE TABLE USERS( id int(11) NOT NULL, //長度為7 username varchar(7)NOT NULL, password varchar(12)NOT NULL , )
分別插入以下SQL語句(注入提示消息)。
①插入正常的SQL語句。
mysql> insert into users(id,username,password)values(1,'admin','admin');//成功插入,無警告,無錯誤 Query OK,1 row affected(0.00 sec)
②插入錯誤的SQL語句,此時(shí)的"admin "右面有三個空格,長度為8,已經(jīng)超過了原有的規(guī)定長度。
mysql> insert into users(id,username,password)values(2,'admin ','admin'); //成功插入,一個警告 Query OK,1 row affected,1 warning(0.00 sec)
③插入錯誤的SQL語句,長度已經(jīng)超過原有的規(guī)定長度。
mysql> insert into users(id,username,password) values(3,'admin x','admin'); //成功插入,一個警告 Query OK,1 row affected,1 warning(0.00 sec)
MySQL提示三條語句都已經(jīng)插入到數(shù)據(jù)庫,只不過后面兩條語句產(chǎn)生了警告。那么最終有沒有插入到數(shù)據(jù)庫呢?執(zhí)行SQL語句查看一下就知道了。
mysql> select username from users;
可以看到,三條數(shù)據(jù)都被插入到數(shù)據(jù)庫,但值發(fā)生了變化,此時(shí)在通過length來取得長度,判斷值的長度。
mysql> select length(username)from users where id =1 ;
可以發(fā)現(xiàn),第二條與第三條數(shù)據(jù)的長度為7,也就是列的規(guī)定長度,由此可知,在默認(rèn)情況下,如果數(shù)據(jù)超出列默認(rèn)長度,MySQL會將其截?cái)唷?/p>
但這樣何來攻擊一說呢?
面查詢用戶名為'admin'的用戶就知道了。
mysql> select username from users where username='admin';
只查詢用戶名為admin的用戶,但是另外兩個長度不一致的admin用戶也被查詢出,這樣就會造成一些安全問題,比如,有一處管理員登錄是這樣判斷的,語句如下:
$sql = "select count(*) from users where username='admin' and password='*******;
假設(shè)這條SQL語句沒有任何注入漏洞,攻擊者也可能登錄到管理頁面。假設(shè)管理員登錄的用戶名為 admin,那么攻擊者僅需要注冊一個"admin”用戶即可輕易進(jìn)入后臺管理頁面,像著名的WordPress就被這樣的方式攻擊過。
到此這篇關(guān)于MySQL長字符截?cái)嗟膶?shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)MySQL長字符截?cái)鄡?nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于com.mysql.jdbc.Driver與com.mysql.cj.jdbc.Driver的區(qū)別
這篇文章主要介紹了關(guān)于com.mysql.jdbc.Driver與com.mysql.cj.jdbc.Driver的區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08Mysql 導(dǎo)入導(dǎo)出csv 中文亂碼問題的解決方法
這篇文章介紹了Mysql 導(dǎo)入導(dǎo)出csv 中文亂碼問題的解決方法,有需要的朋友可以參考一下2013-09-09mysql中替代null的IFNULL()與COALESCE()函數(shù)詳解
這篇文章主要給大家介紹了關(guān)于mysql中替代null的IFNULL()與COALESCE()函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看看吧。2017-06-06MySQL 一次執(zhí)行多條語句的實(shí)現(xiàn)及常見問題
通常情況MySQL出于安全考慮不允許一次執(zhí)行多條語句(但也不報(bào)錯,很讓人郁悶)。2009-08-08