HTTPレスポンス分割

C#のHTTPレスポンス分割

説明

入力のCR/LFがヘッダーやCookieに入り、サーバー、プロキシ、受信側がメッセージの境界として解釈すると、レスポンスヘッダーが改ざんされるおそれがあります。不正な値を拒否するサーバーもあり、影響は実際の処理経路によって変わります。

想定される影響

  • キャッシュ汚染、Cookieの注入、レスポンスの改ざん。

対処方法

ヘッダーとCookieの構文を検証し、CR/LFを含む値は拒否してください。除去する必要がある場合も、許可する文字と長さを別途検証し、サーバーの組み込みヘッダー検証を維持してください。

例

変更前

csharp
Response.Headers["X-Name"] = value;

変更後

valueがnullでないことを前提とする抜粋です。CR/LFだけを除去するため、他の制御文字、長さ、ヘッダー固有の構文は別途検証してください。

csharp
Response.Headers["X-Name"] = value.Replace("\r", "").Replace("\n", "");

解説:

  • 変更前: 入力のCR/LFをレスポンスの境界として扱う経路では、分割が起こる可能性があります。
  • 変更後: 入力をヘッダーやCookieに使う前に、CRとLFを拒否または除去してください。

参考資料