儘管如今呼籲全部的程序都使用unicode編碼,全部的網站都使用utf-8編碼,來一個統一的國際規範。但仍然有不少,包括國內及國外(特別是非英語國家)的一些cms,仍然使用着本身國家的一套編碼,好比我國的gbk,做爲本身默認的編碼類型。也有一些cms爲了考慮老用戶,推出了gbk和utf-8兩個版本(例如:dedecms)程序員
咱們就以gbk字符編碼爲例,拉開帷幕。GBK全稱《漢字內碼擴展規範》,gbk是一種多字符編碼。他使用了雙字節編碼方案,由於雙字節編碼因此gbk編碼漢字,佔用2個字節。一個utf-8編碼的漢字,佔用3個字節。咱們能夠經過輸出來驗證這句話。數據庫
例如:0xD50×5C 對應了漢字「誠」,URL編碼用百分號加字符的16進制編碼表示字符,因而 %d5%5c 經URL解碼後爲「誠」。網站
寬字節SQL注入主要是源於程序員設置數據庫編碼爲非英文編碼那麼就有可能產生寬字節注入
例如說MySql的編碼設置爲了SET NAMES 'gbk'或是 SET character_set_client =gbk,這樣配置會引起編碼轉換從而致使的注入漏洞。
寬字節SQL注入就是PHP發送請求到MySql時使用了語句SET NAMES 'gbk' 或是SET character_set_client =gbk 進行了一次編碼,可是又因爲一些不經意的字符集轉換致使了寬字節注入。編碼
如:將' 輸入後會變成 ' 單引號會被轉義出來
翻譯成url編碼變成 %5c %27 這兩個個
咱們想要繞過反斜槓的轉義 讓單引號出現
因此咱們須要在 %5c 前面加一個編碼 讓它和%5c結合起來組成一個漢字
例如:%d5' = %d5 ' = %d5%5c%27 = "誠"+%27 = "誠"+' = 誠'url