2

「Password」などの不正な文字列をフィルタリングする必要があるのですが、誰かが私のチェック プログラムをバイパスしていることに気付きました。彼らは正確に「パスワード」のように見える文字列を入力しますが、それは等しくありません。Unicode を確認したところ、たとえば、「a」は8e61で、通常の「a」は61(hex) です。私の PHP ファイルのエンコーディング、HTML メタ Content-Type、および MySQL エンコーディングは utf-8 です。

これはどのように起こりますか?コードが異なる視覚的に同一の文字があるのはなぜですか? これらの文字をフィルタリングする方法を知りたいです。ここに奇妙な文字列を入れました。調査のためにコピーしてください: パスワード


ここで問題のある「パスワード」をコピーすると、なぜかASCIIで表示されてしまいました。

「パスワード」で PHP 関数 bin2hex() を使用し、以下を取得します。

50c28e61c28e73c28e73c28e776fc28e72c28e64c28e

通常のものは次のとおりです。

50617373776f7264.

簡単にするために、「a」の 16 進数表現は次のとおりです。

c28e61

通常のものは次のとおりです。

61
4

2 に答える 2

0

あなたが見ているかもしれないもの (あなたの質問の一部が意味をなさないか矛盾しているため、正確にはわかりません) は、いわゆるホモグリフです。これらは同一または非常に似ている文字であるため、一見すると誤解される可能性があります。チェックを回避するために、人々はキリル文字の aを使用してそれを回避できます。しかし率直に言って、ほとんどのパスワードは ASCII のみであるため、実際にスクリプトを混在させようとするパスワード クラッカーを私は知らないため、これは実際には問題ではありません。

理由については、Unicode で文字が重複しているのはなぜですか? を参照してください。.

于 2013-07-16T05:33:18.507 に答える