溫馨提示×

溫馨提示×

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

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

MYSQL中怎么截斷長字符

發(fā)布時間:2021-07-13 15:56:57 來源:億速云 閱讀:218 作者:Leah 欄目:安全技術(shù)

這篇文章將為大家詳細講解有關(guān)MYSQL中怎么截斷長字符,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

MYSQL長字符截斷

即使沒有任何注入漏洞,攻擊者也可能登錄到后臺管理頁面

1、相關(guān)資料

MYSQL中怎么截斷長字符
MYSQL中怎么截斷長字符

2、sql-mode的各項設(shè)置

MySQL5.0以上版本支持三種sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。

1、ANSI模式:寬松模式,更改語法和行為,使其更符合標準SQL。對插入數(shù)據(jù)進行校驗,如果不符合定義類型或長度,對數(shù)據(jù)類型調(diào)整或截斷保存,報warning警告。對于本文開頭中提到的錯誤,可以先把sql_mode設(shè)置為ANSI模式,這樣便可以插入數(shù)據(jù),而對于除數(shù)為0的結(jié)果的字段值,數(shù)據(jù)庫將會用NULL值代替。

2、TRADITIONAL模式:嚴格模式,當向mysql數(shù)據(jù)庫插入數(shù)據(jù)時,進行數(shù)據(jù)的嚴格校驗,保證錯誤數(shù)據(jù)不能插入,報error錯誤,而不僅僅是警告。用于事物時,會進行事物的回滾。 注釋:一旦發(fā)現(xiàn)錯誤立即放棄INSERT/UPDATE。如果你使用非事務(wù)存儲引擎,這種方式不是你想要的,因為出現(xiàn)錯誤前進行的數(shù)據(jù)更改不會“滾動”,結(jié)果是更新“只進行了一部分”。

3、STRICT_TRANS_TABLES模式:嚴格模式,進行數(shù)據(jù)的嚴格校驗,錯誤數(shù)據(jù)不能插入,報error錯誤。如果不能將給定的值插入到事務(wù)表中,則放棄該語句。對于非事務(wù)表,如果值出現(xiàn)在單行語句或多行語句的第1行,則放棄該語句。

STRICT_TRANS_TABLES:
在該模式下,如果一個值不能插入到一個事務(wù)表中,則中斷當前的操作,對非事務(wù)表不做限制。必須設(shè)置,以后各項可能依賴于該項的設(shè)置
NO_ENGINE_SUBSTITUTION:
如果需要的存儲引擎被禁用或未編譯,那么拋出錯誤。不設(shè)置此值時,用默認的存儲引擎替代,并拋出一個異常
ONLY_FULL_GROUP_BY:
對于GROUP BY操作,如果在SELECT中出現(xiàn)的單獨的列,沒有在GROUP BY子句中出現(xiàn),那么這個SQL是不合法的
NO_AUTO_VALUE_ON_ZERO:
該值影響自增長列的插入。默認設(shè)置下,插入0或NULL代表生成下一個自增長值。如果用戶希望插入的值為0,而該列又是自增長的,那么這個選項就有用了
NO_ZERO_IN_DATE:
在嚴格模式下,不允許日期和月份為零
NO_ZERO_DATE:
設(shè)置該值,mysql數(shù)據(jù)庫不允許插入零日期,插入零日期會拋出錯誤而不是警告
ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE過程中,如果數(shù)據(jù)被零除,則產(chǎn)生錯誤而非警告。如果未給出該模式,那么數(shù)據(jù)被零除時MySQL返回NULL
NO_AUTO_CREATE_USER:
禁止GRANT語句創(chuàng)建密碼為空的用戶
PIPES_AS_CONCAT:
將“||”視為字符串的連接操作符而非或運算符,這和Oracle數(shù)據(jù)庫是一樣的,也和字符串的拼接函數(shù)Concat相類似
ANSI_QUOTES:
啟用ANSI_QUOTES后,不能用雙引號來引用字符串,因為它被解釋為識別符
也可以在命令行查看和設(shè)置sql_mode變量

3、產(chǎn)生原因:(1)在sql-mode里沒有加上STRICT_TRANS_TABLES或者TRADITIONAL (2)加上的是ANSI

這里username為varchar(5),即最大規(guī)定長度為5,而輸入的值為‘a(chǎn)dmsddsff’,長度為9,超過規(guī)定長度,可是并沒有報錯。通過查詢可知被截斷了。那么我們可以利用這個漏洞,像相關(guān)資料第二張里被紅筆圈的那句話一樣
MYSQL中怎么截斷長字符

4、預防方法:在sql-mode里加STRICT_TRANS_TABLES或者TRADITIONAL

加上”STRICT_TRANS_TABLES“或者”TRADITIONAL“后,輸入的數(shù)據(jù)超過規(guī)定長度就會報錯,不能輸入
MYSQL中怎么截斷長字符

關(guān)于MYSQL中怎么截斷長字符就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

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

AI