摘要:由于無視目標字符串的編碼,直接按照二進制字節對字符串添加下劃線,會導致很多注入隱患。傳統的函數會直接無視掉而直接對后面的加下劃線,結果變成了。防止注入的話,能夠預編譯是最好,不能的話應該按照當前的編碼,用前綴的字符串處理函數手寫一個。
由于addslashes無視目標字符串的編碼,直接按照二進制字節對字符串添加下劃線,會導致很多注入隱患。
比如說gbk環境下,有一個寬字符是xbfx27。雖然它不在gbk的編碼范圍內,但是會把它當成寬字符解析,攻擊者可以通過構造url參數等方式傳進來。傳統的addslashes函數會直接無視掉xbf而直接對后面的x27加下劃線,結果變成了xbfx5cx27。這樣前面兩個字節構成寬字符,后面的x27就會多帶帶被解析。
防止注入的話,能夠預編譯是最好,不能的話應該按照當前的編碼,用mb前綴的字符串處理函數手寫一個。
比如下面這個:
function mb_addslashes($str, $enco) { $retstr = ""; $len = mb_strlen($str, $enco); for($i = 0; $i < $len; $i++) { $chr = mb_substr($str, $i, 1, $enco); if($chr == "