セキュリティ
許可ホスト
すべてのトークンプロバイダは AllowedHostsValidator を持ち、許可リストにあるホストにのみ
アクセストークンを付与します。負側の経路では資格情報を漏らさず、空トークンを返します。これは
クロスホスト漏洩に対する保険です — 例えば HTTP リダイレクトが Authorization ヘッダを別ホストへ
運んでしまう場合に備えます。
既定:
- Messaging:
api.line.meとapi-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)。
コードへの影響:
- 生バイトに対して、モデルバインドや再エンコードの前に検証してください — さもないと署名が
一致しません。WebhookRequestParser は
byte[]を受け取ることでこれを 強制します。 - ヘッダが欠落・不正な場合は不正として扱います(
falseを返す)。 - 本文サイズの上限は利用側の責務です。 メモリ使用量を抑えるため、上流で生ボディの上限を
設けてください(例: ASP.NET Core の
MaxRequestBodySize)。
シークレットの取り扱い
- 本ライブラリは署名鍵を扱いません。JWT アサーションによるトークン発行では、署名済み アサーションをファクトリで生成し、その結果の文字列だけを渡します。
- チャネルアクセストークンとチャネルシークレットは利用側が(オプションやプロバイダの コンストラクタ経由で)供給し、ライブラリは永続化しません。