網(wǎng)站建設(shè)術(shù)語(yǔ)解釋在線crm
MySQL超長(zhǎng)字符截?cái)嘤置?#34;SQL-Column-Truncation",是安全研究者Stefan Esser在2008 年8月提出的。
在MySQL中的一個(gè)設(shè)置里有一個(gè)sql_mode選項(xiàng),當(dāng)sql_mode設(shè)置為default時(shí),即沒(méi)有開(kāi)啟STRICT_ALL_TABLES選項(xiàng)時(shí)(MySQLsql_mode默認(rèn)即default),MySQL對(duì)插入超長(zhǎng)的值只會(huì)提示warning,而不是error,這樣就可能會(huì)導(dǎo)致一些截?cái)鄦?wèn)題。
新建一張表測(cè)試,表結(jié)構(gòu)如下(MySQL5.1):
CREATE TABLE USERS(id int(11) NOT NULL, //長(zhǎng)度為7username varchar(7)NOT NULL,password varchar(12)NOT NULL ,)
分別插入以下SQL語(yǔ)句(注入提示消息)。
①插入正常的SQL語(yǔ)句。
mysql> insert into users(id,username,password)values(1,'admin','admin');//成功插入,無(wú)警告,無(wú)錯(cuò)誤Query OK,1 row affected(0.00 sec)
②插入錯(cuò)誤的SQL語(yǔ)句,此時(shí)的"admin "右面有三個(gè)空格,長(zhǎng)度為8,已經(jīng)超過(guò)了原有的規(guī)定長(zhǎng)度。
mysql> insert into users(id,username,password)values(2,'admin? ? ? ?','admin');//成功插入,一個(gè)警告Query OK,1 row affected,1 warning(0.00 sec)
③插入錯(cuò)誤的SQL語(yǔ)句,長(zhǎng)度已經(jīng)超過(guò)原有的規(guī)定長(zhǎng)度。
mysql> insert into users(id,username,password) values(3,'admin x','admin');//成功插入,一個(gè)警告Query OK,1 row affected,1 warning(0.00 sec)
MySQL提示三條語(yǔ)句都已經(jīng)插入到數(shù)據(jù)庫(kù),只不過(guò)后面兩條語(yǔ)句產(chǎn)生了警告。那么最終有沒(méi)有插入到數(shù)據(jù)庫(kù)呢?執(zhí)行SQL語(yǔ)句查看一下就知道了。
mysql> select username from users;
可以看到,三條數(shù)據(jù)都被插入到數(shù)據(jù)庫(kù),但值發(fā)生了變化,此時(shí)在通過(guò)length來(lái)取得長(zhǎng)度,判斷值的長(zhǎng)度。
mysql> select length(username)from users where id =1 ;
可以發(fā)現(xiàn),第二條與第三條數(shù)據(jù)的長(zhǎng)度為7,也就是列的規(guī)定長(zhǎng)度,由此可知,在默認(rèn)情況下,如果數(shù)據(jù)超出列默認(rèn)長(zhǎng)度,MySQL會(huì)將其截?cái)唷?/p>
但這樣何來(lái)攻擊一說(shuō)呢?
面查詢(xún)用戶(hù)名為'admin'的用戶(hù)就知道了。
mysql> select username from users where username='admin';
只查詢(xún)用戶(hù)名為admin的用戶(hù),但是另外兩個(gè)長(zhǎng)度不一致的admin用戶(hù)也被查詢(xún)出,這樣就會(huì)造成一些安全問(wèn)題,比如,有一處管理員登錄是這樣判斷的,語(yǔ)句如下:
$sql = "select count(*) from users where username='admin' and password='*******;
假設(shè)這條SQL語(yǔ)句沒(méi)有任何注入漏洞,攻擊者也可能登錄到管理頁(yè)面。假設(shè)管理員登錄的用戶(hù)名為 admin,那么攻擊者僅需要注冊(cè)一個(gè)"admin”用戶(hù)即
可輕易進(jìn)入后臺(tái)管理頁(yè)面,像著名的WordPress就被這樣的方式攻擊過(guò)。