1

キリル文字のドメインで Web アプリを開発しています。現在、このドメインは「パーキング ページ」をホストしており、サイトは作成中であると言っています。Chrome でアクセスすると、アドレス バーに punycode が表示されます。ただし、Safariはそれをデコードします。開発目的で/etc/hosts、テスト用のキリル文字ドメインを介して localhost にアクセスできるようにファイルを変更しました。ただし、Chrome と Safari の両方がホスト名のデコードに失敗します。

この問題を調べましたが、賢明な解決策が見つかりませんでした。という Node.js 用のモジュールがありますpunycode。ここで、 myreq.urlにキリル文字が含まれている場合はエンコードURIComponentされるため、デコードするミドルウェアを作成しました。

app.use(function(req, res, next) {
    var url = req.url,
        decoded = decodeURIComponent(url);

    if (url !== decoded) req.url = decoded;
    next();
});

正常に動作し、キリル文字のルーティングを使用できるようになりました。しかし、このロジックをホスト名に適用しようとすると、うまくいきません:

app.use(function(req, res, next) {
    var hostname = req.hostname,
        decoded = punycode.toUnicode(hostname);

    if (hostname !== decoded) req.hostname = decoded;
    // I have also tried return res.redirect('https://' + decoded + ':' + ...);
    next();
});

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

0

わかりましたので、調査の結果、それはほとんど不可能であることがわかりました。ホスト解決ポリシーは厳密にブラウザー固有であり、(IDN に関して) 危険なフィッシング活動を防止するために存在します。一方、Safari は IDN を punycode から UTF-8 文字列に解決しますが、Chrome は解決しません。

これらの危険なフィッシング活動は、ASCII 以外の文字を含むドメインに起因する可能性があります。ASCII 文字 "o, e, a" と UTF-8 ロシア語 (キリル) 文字 "о, е, а" のセットを考えてみましょう。それらはほとんど同じに見えるため、クライアントにとって区別がつきません。そのため、ハッカーはよく知られているドメイン (「paypal.com」は ASCII の「a」、「paypal.com」は UTF-8 キリル文字の「а」) に似たドメインを登録する可能性があります。

このような悪意のあるアクティビティを防ぐために、Chrome は非 ASCII 文字を punycode にエンコードします (UTF-8 キリル文字の「а」を含む「paypal.com」は、ブラウザのアドレス バーで「xn--pypl-53dc.com」のように表示され、クライアントに警告します)。元の Web サイトではないことを確認してください)。

ため息、これまでのところ、IDN は最適なソリューションではないようです。

于 2016-03-20T10:48:57.050 に答える