ブラウザ内ツール
URLパーサ
URLを貼り付けると、scheme・userinfo・host・port・path・query・fragmentに分解して表示します。https://accounts.google.com@evil.com/ が実際に接続するのはどちらのドメインか—— URLの見た目に騙されないための実例つきです。
このURLにはユーザー名@が含まれています。ブラウザが実際に接続するのは@より後ろのホスト(www.example.com)で、@より前(user)は単なる認証情報として無視されます。 一見有名なドメインに見えて実際は別サイトへ誘導する、典型的なフィッシングの手口です。
Protocol(スキーム)
https:
Origin
https://www.example.com:8443
Hostname(ホスト)
www.example.com
Port(省略時は既定値)
8443
Username
user
Password
●●●●●●(値あり)
Pathname(パス)
/path/to/page
Hash(フラグメント)
#section-2
Query(クエリ文字列)
| キー | 値 |
|---|---|
| q | 検索語 |
| tag | ab |
正規化後のhref
https://user:pass@www.example.com:8443/path/to/page?q=%E6%A4%9C%E7%B4%A2%E8%AA%9E&tag=a&tag=b#section-2
解析にはブラウザ標準のURLクラス(WHATWG URL規格)を使用。相対パスの解決やレアな符号化パターンなど、細部はRFC 3986の文法と完全一致しない場合があります。
見た目に騙されないための3点
- @より前は認証情報、@より後ろが本当の接続先:
https://accounts.google.com@evil.com/は見た目にGoogleのドメインを含むが、実際に接続するのはevil.com。ユーザー名に任意の文字列(ドットを含む)を入れられることを悪用したフィッシングの定番手口。 - Punycode(xn--)は非ASCIIドメインの符号化:見た目のホスト名と実際のドメイン文字列が一致しないことがある。キリル文字などラテン文字に酷似した文字での類似ドメイン偽装(ホモグラフ攻撃)と組み合わさると特に危険。
- クエリの同名キーは配列になりうる:
?tag=a&tag=bは多くのサーバーでtag=[a,b]として扱われる。URLSearchParams.get()は最初の値しか返さないので、複数値を扱うコードではgetAll()を使う。