java 宽字节_宽字节注入
寬字節注入
原理:寬字節(兩字節)帶來的安全問題主要是吃ASCII字符(一字節)的現象,使用一些特殊字符來”吃掉“經過轉義符 “ \ ” 。
在重新詳細了解寬字節注入之前,我認為寬字節注入只是出現在網站使用GBK編碼的時代,現在已經很少出現了,但是實際上寬字節不只是出現在GBK編碼中。
在PHP中,通過iconv()進行編碼轉換時,也可能出現寬字節注入。
還有一個誤區:
這里的編碼問題不是出現在HTML頁面編碼,而是與數據庫的編碼形式有關,一般我們在建立一個數據庫的時候會讓我們選擇數據庫的編碼形式,所以有時候網站雖然是UTF-8寫的,但是如果數據庫是GBK的形式,也會出現寬字節,現實這樣建站的奇葩應該很少叭。。。
寬字節編碼有哪些:
GB2312、GBK、GB18030、BIG5、Shift_JIS等這些都是常說的寬字節
MySQL中用于轉義的函數有:
addslashes、mysql_real_escape_string、mysql_escape_string以及后面在高版本被去除的magic_quote_gpc
繞過思路:
因為寬字節注入主要是吃掉 \ ,所以一般時候加一個 %df 這種就可以吃掉,其實加三個%df也可以吃掉,只要是奇數個%df即可。
防御方法:
1.設置character_set_client=binary,將數據以二進制形式傳遞
2.矯正人們對于mysql_real_escape_string的誤解,單獨調用set names gbk和mysql_real_escape_string是無法避免寬字符注入問題的。還得調用mysql_set_charset來設置一下字符集。
3.謹慎使用iconv來轉換字符串編碼,很容易出現問題。只要我們把前端html/js/css所有編碼設置成gbk,mysql/php編碼設置成gbk,就不會出現亂碼問題。不用畫蛇添足地去調用iconv轉換編碼,造成不必要的麻煩。
參考連接:
1
2
總結
以上是生活随笔為你收集整理的java 宽字节_宽字节注入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java avl_Java底层实现AVL
- 下一篇: java链表list_java集合之li