php多字節(jié)注入

一封老郵件:

之前出現(xiàn)的問題就是當數(shù)據(jù)庫字符集設(shè)置為gbk時干毅,%bf%27這個調(diào)用mysql_real_escape_string轉(zhuǎn)化后會出現(xiàn)%bf%5c%27仍然會出現(xiàn)安全問題。

例子:

http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html

中文介紹:

http://www.cnblogs.com/Safe3/archive/2008/08/22/1274095.html

文中采用如下方式去設(shè)置字符集,當然我們看到大部分程序都是通過這種方式設(shè)置字符集的:

mysql_query(“SET CHARACTER SET ‘gbk'”, $c); 或者mysql_query(“SET NAMES ‘gbk’ “, $c);

這種調(diào)用會導致mysql_real_escape_string 出現(xiàn)問題,也就是比較常見的%bf%27轉(zhuǎn)義后會成為%bf%5c%27,但是%bf%5c是一個合法的gbk字符,導致了安全問題的產(chǎn)生

值得注意是在php手冊中說明了這個函數(shù)會根據(jù)當前字符集處理轉(zhuǎn)義双絮。也就是說這種情況下,并沒有根據(jù)當前字符集(我們設(shè)置的gbk)進行轉(zhuǎn)義還是采用了latin1得问,或者說明上面的這句話并不會改變mysql_real_escape_string對字符集的認識囤攀。

做個試驗會發(fā)現(xiàn)你如果用mysqli(mysql的一個擴展方式php_mysqli.dll)的方法$mysqli->set_charset設(shè)置字符集之后,調(diào)用$mysqli->real_escape_string(也是轉(zhuǎn)義函數(shù))就能夠正常處理這個問題了宫纬,%bf%27會轉(zhuǎn)化為%5c%bf%5c%27焚挠。而不是%bf%5c%27

說明一下兩種php調(diào)用mysql的流程:

1)調(diào)用mysql_real_escape_string是調(diào)用在php_mysql.dll擴展中定義的php函數(shù),然后最終會調(diào)用libmysql.dll的導出函數(shù)mysql_real_escape_string

2)調(diào)用$mysqli->real_escape_string是調(diào)用在php_mysqli.dll擴展中定義的php函數(shù)漓骚,然后最終也會調(diào)用libmysql.dll的導出函數(shù)mysql_real_escape_string

可以看出兩種方式都最終都調(diào)用了相同的函數(shù)蝌衔,所以看來php_mysql.dll中的mysql_real_escape_string并沒有根據(jù)set names ‘gbk’進行轉(zhuǎn)化。

通過參考 http://dev.mysql.com/doc/refman/5.1-maria/en/mysql-real-escape-string.html 中的一段話可以發(fā)現(xiàn):

If you need to change the character set of the connection, you should use the mysql_set_character_set() function rather than executing a SET NAMES (or SET CHARACTER SET) statement. mysql_set_character_set() works like SET NAMES but also affects the character set used by mysql_real_escape_string(), which SET NAMES does not.

這表明set names只是設(shè)置了服務(wù)器端的編碼蝌蹂,對mysql_real_escape_string()沒有影響噩斟,所以有效地方式是調(diào)用mysql_set_character_set(),php_mysqli里面有相關(guān)調(diào)用孤个。在“低版本”的php_mysql.dll中沒有定義可以設(shè)置charset的接口剃允,所以不得不采用set names 的方式,所以導致了問題的產(chǎn)生齐鲤。

在高版本php中硅急,PHP 5 >= 5.2.3有了一個新函數(shù)mysql_set_charset這時設(shè)置字符集后,就不會在產(chǎn)生轉(zhuǎn)義導致的安全問題了佳遂。

這個問題還是比較典型,最開始是mysql的bug撒顿,沒有考慮多字節(jié)的轉(zhuǎn)義丑罪,后來php又沒有提供相應(yīng)的php函數(shù)接口,導致安全問題的產(chǎn)生,具體細節(jié)請看參考連接吩屹。

Discuz的處理方式:

調(diào)用先調(diào)用SET NAMES gbk , 然后 SET character_set_client = binary 設(shè)置連接參數(shù)跪另,這句話會保證%bf%5c%27 select不會產(chǎn)生問題,但最終查了什么我試了很多次都沒有得到結(jié)果煤搜,這里面有一個問題就是免绿,如果在insert時就會導致connection轉(zhuǎn)化client導致轉(zhuǎn)化成空的字符,所以也談不上完美的方式擦盾。

解決方法:

Mysql升級到高版本嘲驾;

升級php到高版本或者添加自定義補丁到低版本php中添加對mysql_set_character_set()的調(diào)用,或者低版本中采用mysqli迹卢;

參考:

http://bugs.mysql.com/bug.php?id=8378

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辽故,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腐碱,更是在濱河造成了極大的恐慌誊垢,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件症见,死亡現(xiàn)場離奇詭異喂走,居然都是意外死亡,警方通過查閱死者的電腦和手機谋作,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門芋肠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓷们,你說我怎么就攤上這事业栅。” “怎么了谬晕?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵碘裕,是天一觀的道長。 經(jīng)常有香客問我攒钳,道長帮孔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任不撑,我火速辦了婚禮文兢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焕檬。我一直安慰自己姆坚,他們只是感情好,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布实愚。 她就那樣靜靜地躺著兼呵,像睡著了一般兔辅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上击喂,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天维苔,我揣著相機與錄音,去河邊找鬼懂昂。 笑死介时,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的凌彬。 我是一名探鬼主播沸柔,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼饿序!你這毒婦竟也來了勉失?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤原探,失蹤者是張志新(化名)和其女友劉穎乱凿,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咽弦,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡徒蟆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了型型。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片段审。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡扣猫,死狀恐怖踢俄,靈堂內(nèi)的尸體忽然破棺而出规丽,到底是詐尸還是另有隱情馒索,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布饭聚,位于F島的核電站蛔溃,受9級特大地震影響肌毅,放射性物質(zhì)發(fā)生泄漏砌烁。R本人自食惡果不足惜筐喳,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望函喉。 院中可真熱鬧避归,春花似錦、人聲如沸管呵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捐下。三九已至顿天,卻和暖如春堂氯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背牌废。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留啤握,地道東北人鸟缕。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像排抬,于是被迫代替她去往敵國和親懂从。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • php.ini設(shè)置,上傳大文件: post_max_size = 128Mupload_max_filesize ...
    bycall閱讀 6,774評論 3 64
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_閱讀 1,828評論 0 3
  • 不知道為什么發(fā)布不了蹲蒲,所有文字成空番甩。 而自己,一般都是一次性文字届搁,寫了不會再寫缘薛。 所以有的話心里過一遍就好。 短暫...
    漫漫無憂閱讀 132評論 6 9
  • 因為上一周表現(xiàn)好卡睦,所以老師就讓我們今天舉行一個活動宴胧,叫做:同舟共濟。 老師讓我們拿好墊子到下面去表锻,然后老師...
    故鄉(xiāng)先生閱讀 355評論 0 2
  • 晨讀感悟 今天晨讀材料分享的書叫《氣質(zhì)》。 氣質(zhì) 每個人都有獨一無二的氣質(zhì)确镊。更多的內(nèi)心修煉都可以培養(yǎng)更好的氣質(zhì)士骤,有...
    xz藍天閱讀 883評論 1 4