問題タブ [homoglyph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1939 参照

unicode - ハッシュ時のパスワードに適した Unicode 正規化 (およびその他の処理) は何ですか?

パスワードに完全な Unicode を受け入れる場合、文字列をハッシュ関数に渡す前にどのように正規化すればよいですか?

目標

正規化しないと、あるコンピューターでパスワードを「mañana」( ma\u00F1ana) に設定し、別のコンピューターで「mañana」( ) を使用してログインしようとするとma\u006E\u0303ana、ハッシュが異なり、ログインに失敗します。これは、ユーザー エージェントまたはそのオペレーティング システムの制御下にあります。

  • それらが同じものにハッシュされるようにしたいと思います。
  • Α、А、A (ギリシャ語、キリル文字、ラテン語)などのホモグリフは気にしません。

参照

Unicode 正規化フォーム: http://unicode.org/reports/tr15/#Norm_Forms

考慮事項

  • 正規化手順は、衝突を引き起こす可能性があります"office" == "office"
  • 正規化により、文字列のバイト数が変わる場合があります。

さらなる質問

  • サーバーが有効な UTF-8 (またはその他の形式) ではないバイト シーケンスを受信した場合はどうなりますか? 正規化できないので拒否しますか?
  • サーバーがそのバージョンの Unicode で割り当てられていない文字を受信するとどうなりますか?
0 投票する
2 に答える
2037 参照

java - 電子メール フィッシングにおけるホモグリフ攻撃の検出

主な質問

私は、フィッシング メールでのブランド (PayPal、Mastercard など) の使用を検出する必要がある Java の API に取り組んでいます。

明らかに、攻撃者がこれらのブランドを標的にして検出を困難にするために使用するさまざまな戦略があります。たとえば、「rnastercard 」は「 mastercard」と非常によく似ており、疑うことを知らないユーザーをだますことができます。

現時点では、あいまい文字列検索の形式を使用して、これらのブランドのスペルミスを簡単に検出できます。しかし、私が直面している問題は、攻撃者がホモグリップを使用して特定のブランドの名前を変更し、同じ視覚的解釈を維持する場合です。

ホモグリフ攻撃は、[a-zA-Z]パターンの文字を、似ているがこの範囲外の文字に置き換えます。たとえば、特定の文字セットを使用する攻撃者は、P に似たギリシャ文字 RHOを使用して PayPal を標的にすることができます。この種の攻撃における PayPal のブランド名は次のようになります。

[ギリシャ文字 RHO][a][y][ギリシャ文字 RHO][a][l]

私は Unicode や ISO 規格などのさまざまな規格とそれらのエンコーディングの経験がほとんどまたはまったくないため、あなたのアドバイスを求めています。結果が[a-zA-Z] セット内の文字になるように、[a-zA-Z] セット外の文字の視覚的同等物をプログラムで決定する方法はありますか?

あなたの回答の一部は特定の文字セットに基づいている可能性があります。メール内で使用できるすべての文字セットのそのような表現を決定するのに役立つソリューションを探しています.

メール交換の RFC 標準を読んだことはありませんが、リストに載っています。時間を節約するために、今この質問をしています。

可能だが実行できない解決策

私はいくつかの解決策を考えましたが、それらは非常にCPUを集中的に使用し、ハックのような性質を持つため、私の特定のケースでは実行できません(「簡単に壊れる可能性がある」と読んでください)。

最初の解決策は、 [a-zA-Z] の外側にある文字をその形式で画像に書き込み、その画像を OCR API にフィードして、最も近い[a-zA-Z]表現を取得することです。

2 番目の解決策は、文字セットごとにマップを作成することです。マップのキーは文字そのものであり、値は[a-zA-Z]に相当します。このマップは、手動で行うか、上記の最初のソリューションを使用して行う必要があります。

追加の詳細

私はすでにこの質問をここにしました。ただし、編集作業にもかかわらず、質問は閉じられたままでした。おそらく、私が自分自身をうまく表現しておらず、質問に適切にタグを付けていなかったためです。

その特定の質問では、実際の質問を曇らせるJavaで使用される文字セットに関して私が持っていたいくつかの懸念にも対処しました. ただし、回答にそのような情報を含める必要があると感じた場合は、そのような質問を調査する時間を節約できるので、感謝します. ホモグリフ攻撃の問題と、Java または *javax.mail.** の文字セットの問題は、別々ですが関連しています。

主な質問で説明されているホモグリフ攻撃の特定の例として、この電子メールがあります。注意!これは、この特定の攻撃方法を使用したフィッシング メールの実際の内容であるため、そのメールに含まれるリンクをたどらないでください。

この質問には、適切なタグと思われるタグを付けました。同意しない場合は、この質問に投票するのではなく、編集してください。

0 投票する
2 に答える
1052 参照

regex - 文字列には文字と数字のみを許可し、混乱を招くものは許可しない

言語に関係なく、ユーザー名を文字と数字のみで構成したいとします。

次の正規表現パーツでこれを達成できると思います

現在、ユーザーが別のユーザーと同じように見えるユーザー名を使用して、別のユーザーになりすます可能性があるという問題があります (ホモグラフ攻撃)。admin と admin がその例です。

正規表現を使用して文字と混同可能性の両方である文字を簡単に除外することはできないと思いますが、正規表現のコンテキスト外ではどうですか。コンフューザブルの Unicode ID は、フィルタリングできる特定の範囲内にあるか、またはそのようなものですか?