HeaderInjection
ユーザー入力がHTTPヘッダーに直接使用される場合に検出されます。
<?php
class DownloadResource extends ResourceObject
{
public function onGet(string $filename): static
{
// 脆弱: ヘッダーインジェクション
header('Content-Disposition: attachment; filename=' . $filename);
return $this;
}
}
修正方法
ヘッダー値を検証し、改行文字を削除またはエンコードしてください:
<?php
class DownloadResource extends ResourceObject
{
public function onGet(string $filename): static
{
// 安全: 改行を削除してエンコード
$safeFilename = str_replace(["\r", "\n"], '', $filename);
$safeFilename = rawurlencode($safeFilename);
header('Content-Disposition: attachment; filename="' . $safeFilename . '"');
return $this;
}
}
header() 関数は改行文字を含むヘッダーを拒否しますが、明示的な検証を行うことを推奨します。