ブラウザ内ツール

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検索語
tagab

正規化後の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()を使う。