Table of Contents

セキュリティ

許可ホスト

すべてのトークンプロバイダは AllowedHostsValidator を持ち、許可リストにあるホストにのみ アクセストークンを付与します。負側の経路では資格情報を漏らさず、空トークンを返します。これは クロスホスト漏洩に対する保険です — 例えば HTTP リダイレクトが Authorization ヘッダを別ホストへ 運んでしまう場合に備えます。

既定:

  • Messaging: api.line.meapi-data.line.me
  • LIFF: api.line.me のみ(データ系ホスト無し)。

許可リストはハードコードではなく注入可能(オプション型の AllowedHosts、またはプロバイダの コンストラクタ)にしており、manager.line.biz のような将来のホストに備えています。

ランタイム最低版。 Microsoft.Kiota.Abstractions>= 1.22.0 が必要です。これは RedirectHandler のクロスホスト時の機密ヘッダ漏洩(CVE-2026-44503 / GHSA-7j59-v9qr-6fq9、 CVSS 7.0)の修正を含みます。本ライブラリ群は Kiota バンドルを 2.0.0 に固定しており、この 修正を継承します。.NET 10 SDK の NuGet 監査が推移的依存も含めて退行を検知します。

Webhook 署名検証

受信 Webhook は x-line-signature ヘッダで認証されます。検証は OpenAPI 仕様には含まれない ため、WebhookSignatureValidator に手書きで実装されています:

  • チャネルシークレットを鍵とした、リクエスト生ボディのバイト列の HMAC-SHA256 を Base64 化。
  • タイミング攻撃を避けるため、ヘッダ値と定数時間で比較 (CryptographicOperations.FixedTimeEquals)。

コードへの影響:

  • 生バイトに対して、モデルバインドや再エンコードの前に検証してください — さもないと署名が 一致しません。WebhookRequestParserbyte[] を受け取ることでこれを 強制します。
  • ヘッダが欠落・不正な場合は不正として扱います(false を返す)。
  • 本文サイズの上限は利用側の責務です。 メモリ使用量を抑えるため、上流で生ボディの上限を 設けてください(例: ASP.NET Core の MaxRequestBodySize)。

シークレットの取り扱い

  • 本ライブラリは署名鍵を扱いません。JWT アサーションによるトークン発行では、署名済み アサーションをファクトリで生成し、その結果の文字列だけを渡します。
  • チャネルアクセストークンとチャネルシークレットは利用側が(オプションやプロバイダの コンストラクタ経由で)供給し、ライブラリは永続化しません。