注入產生的原理:程序員
數據庫設置爲GBK編碼:數據庫
寬字節注入源於程序員設置MySQL鏈接時錯誤配置爲:set character_set_client=gbk,這樣配置會引起編碼轉換從而致使的注入漏洞.函數
一、正常狀況下,當GPC開啓或者使用addslashes函數會過濾GET或POST提交的參數時,黑客使用的單引號(')會被轉義成:\';編碼
二、但若是存在寬字節注入,咱們輸入%df%27時,首先通過上面提到的單引號轉義變成了%df%5c%27(%5c是反斜槓),以後在數據庫查詢utf-8
前因爲使用了GBK多字節編碼,即在漢字編碼範圍內兩個字節會編碼爲一個漢字.從而形成注入漏洞.it
服務端代碼設置爲UTF-8編碼:原理
utf-8轉GBKcli
這裏思考下「錦」這個字,它的utf-8編碼是e98ca6,它的gbk編碼是%e5%5c,而上面提到過反斜槓\正好爲%5c.因此若是咱們將title設置配置
爲:'錦',首先通過addlashes函數或GPC對單引號轉義變爲:錦\', 而後會通過iconv函數會對"錦"轉化爲gbk編碼,最後就是%e5%5c%5c%27.程序
反斜槓被轉義了(%5c%5c),從而單引號逃逸出來就會引起注入漏洞。