説明
入力の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を拒否または除去してください。