溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL長字符截斷如何實現(xiàn)

發(fā)布時間:2023-03-25 10:56:44 來源:億速云 閱讀:99 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“MySQL長字符截斷如何實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“MySQL長字符截斷如何實現(xiàn)”吧!

MySQL超長字符截斷又名"SQL-Column-Truncation",是安全研究者Stefan Esser在2008 年8月提出的。

在MySQL中的一個設(shè)置里有一個sql_mode選項,當(dāng)sql_mode設(shè)置為default時,即沒有開啟STRICT_ALL_TABLES選項時(MySQLsql_mode默認(rèn)即default),MySQL對插入超長的值只會提示warning,而不是error,這樣就可能會導(dǎo)致一些截斷問題。

新建一張表測試,表結(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語句,此時的"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ā)生了變化,此時在通過length來取得長度,判斷值的長度。

mysql> select length(username)from users where id =1 ;

可以發(fā)現(xiàn),第二條與第三條數(shù)據(jù)的長度為7,也就是列的規(guī)定長度,由此可知,在默認(rèn)情況下,如果數(shù)據(jù)超出列默認(rèn)長度,MySQL會將其截斷。

但這樣何來攻擊一說呢?

面查詢用戶名為'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就被這樣的方式攻擊過。

到此,相信大家對“MySQL長字符截斷如何實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI