2013-07-16 159 views
2

我需要過濾一些非法字符串,如「密碼」,但我發現有人繞過了我的檢查程序。他們輸入的字符串似乎完全是「密碼」,但並不相同。 我檢查了它的Unicode,例如,「a」是8e61,而正常的「a」是61(十六進制)。 我的PHP文件的編碼,HTML meta內容類型和MySQL編碼是utf-8。兩個字符似乎相同,但UTF-8編碼不相同

這是怎麼發生的?爲什麼有不同代碼的視覺相同的字符? 我想知道如何過濾這些字符。 我把怪異的字符串在這裏,請複製研究: 密碼


出於某種原因,當我在這裏複製的「密碼」有問題的,它實際上顯示的ASCII之一。

我的 「密碼」 使用PHP函數BIN2HEX(),和下面獲得:

50c28e61c28e73c28e73c28e776fc28e72c28e64c28e 

,而一個正常的是:

50617373776f7264. 

,使其更簡單,爲「十六進制表示a」爲:

c28e61 

而正常之一是:

61 
+0

歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。歡迎來到Unicode的美妙世界。有很多具有多種表現形式的角色。對於一個半異域的例子,阿拉伯數字1被編碼兩次,一次是西方阿拉伯語U + 0660,一次是東部阿拉伯文U + 06F0,但符號相同;這是其他一些不同的數字。請參見[在Unicode中,爲什麼有兩個阿拉伯數字的表示形式](http://stackoverflow.com/questions/1676460/)。您必須決定是否將U + 8E61與U + 0061 _ [...繼續...] _ –

+0

_ [...繼續...]保持一致; U + 8E61是一個統一的漢字符號。您使用的是哪個代碼頁?0x8E61不是有效的UTF-8; 0x8E是繼續字節,而0x61是LATIN SMALL LETTER A,後面跟不上繼續字節。你沒有提供我們需要的所有信息;什麼是你處理的整個字節序列?上述評論仍然準確並且或多或少相關,但您不可能將U + 8E61視爲U + 0061。 –

+0

我複製了你的字符串,它被識別爲包含:'0x0000:50 61 73 73 77 6F 72 64 Password'。這是密碼的常規ASCII表示。所以你的複製/粘貼不會保留奇怪的字符,或者我的沒有。我正在使用Mac。你能識別你認爲你有十六進制的字節嗎? –

回答

0

你可能會看到(我無法確切地說,因爲你的問題的部分沒有意義或不一致)是所謂的同類書籍。這些角色看起來相同或非常相似,因此可能會乍看起來有誤。爲了規避您的支票,人們可以使用西里爾文a並且避開它。但坦率地說,這實際上並不是一個問題,因爲我不知道密碼破解程序實際上會嘗試混合腳本,因爲大多數密碼都是ASCII碼。你可以看看Why are there duplicate characters in Unicode?

1

鑑於十六進制字符串50c28e61c28e73c28e73c28e776fc28e72c28e64c28e,你有一個合法的UTF-8字符串的編碼:

0x50  = U+0050 = P 
0xC2 0x8E = U+008E = SS2 
0x61  = U+0061 = a 
0xC2 0x8E = U+008E = SS2 
0x73  = U+0073 = s 
0xC2 0x8E = U+008E = SS2 
0x73  = U+0073 = s 
0xC2 0x8E = U+008E = SS2 
0x77  = U+0077 = w 
0x6F  = U+006F = o 
0xC2 0x8E = U+008E = SS2 
0x72  = U+0072 = r 
0xC2 0x8E = U+008E = SS2 
0x64  = U+0064 = d 
0xC2 0x8E = U+008E = SS2 

的爲0xC2爲0x8E序列映射到ISO 8859-1爲0x8E,這是一個控制字符SS2或單移2(見Unicode Code Charts)。 SS2沒有定義的可見表示。該字符串明顯不同於普通的「密碼」。只要你不去除控制字符,你應該能夠發現差異,因爲字符串比較不應該把它看作與普通的'密碼'相同。

+0

謝謝!如何在PHP中刪除這個字符,或這種字符?我搜索了一些,像這樣http://stackoverflow.com/questions/1176904/php-how-to-remove-all-non-printable-characters-in-a-string,但他們不能刪除這個字符。 –

+0

我發現瞭解決方案在這裏刪除它:http://stackoverflow.com/questions/3295125/preg-replace-to-strip-out-non-printing-characters-seems-to-remove-all-foreign- CH –

相關問題