メインコンテンツまでスキップ

4. Origin of a URI (URIの生成元)

4. Origin of a URI (URIの生成元)

URIの生成元 (origin) は, 次のアルゴリズムによって計算される値です:

  1. URIが命名権限 (naming authority) として階層的要素 (hierarchical element) を使用しない場合 ([RFC3986], セクション3.2を参照), またはURIが絶対URI (absolute URI) ではない場合, 新しいグローバル一意識別子 (globally unique identifier) を生成し, その値を返します。

    注意: 同じURIに対してこのアルゴリズムを複数回実行すると, 毎回異なる値が生成される可能性があります。通常, ユーザーエージェントは, 例えばHTMLドキュメントの生成元を一度計算し, その生成元を後続のセキュリティチェックに使用します, セキュリティチェックごとに生成元を再計算するのではなく。

  2. uri-scheme をURIのスキーム (scheme) コンポーネントとし, 小文字に変換します。

  3. 実装が uri-scheme で指定されたプロトコルをサポートしていない場合, 新しいグローバル一意識別子を生成し, その値を返します。

  4. uri-scheme が "file" の場合, 実装は実装定義の値を返すことができます (MAY)。

    注意: 歴史的に, ユーザーエージェントはfileスキームからのコンテンツに非常に大きな特権を付与してきました。しかし, すべてのローカルファイルにこのような広範な特権を付与すると, 特権昇格攻撃 (privilege escalation attack) につながる可能性があります。一部のユーザーエージェントは, ローカルファイルにディレクトリベースの特権を付与することに成功していますが, このアプローチは広く採用されていません。他のユーザーエージェントは, 各ファイルURIにグローバル一意識別子を使用します, これが最も安全なオプションです。

  5. uri-host をURIのホスト (host) コンポーネントとし, 小文字に変換します ([RFC4790]で定義されている i;ascii-casemap 照合規則を使用)。

    注意: このドキュメントは, ユーザーエージェントがURIを構築する際に国際化ドメイン名アプリケーション (Internationalizing Domain Names in Applications, IDNA) 処理と検証を実行することを前提としています。特に, このドキュメントは, ユーザーエージェントが非ASCIIラベルをそれぞれ対応するAラベル (A-label) に既に変換しているため, uri-host にはLDHラベル (LDH label) のみが含まれることを前提としています ([RFC5890]を参照)。このため, 生成元ベースのセキュリティポリシーは, ユーザーエージェントが採用するIDNAアルゴリズムに敏感です。詳細については, セクション8.4を参照してください。

  6. URIにポート (port) コンポーネントがない場合:

    1. uri-porturi-scheme で指定されたプロトコルのデフォルトポートとします。

    それ以外の場合:

    1. uri-port をURIのポートコンポーネントとします。
  7. 3つ組 (uri-scheme, uri-host, uri-port) を返します。