安全性諮詢:Slim-Psr7 的標頭驗證不當
最近已在 Slim-Psr7 報告一個安全性問題,與標頭中的新行處理有關。
影響
攻擊者可以在標頭名稱和值中插入新行 (\\n)。雖然規格說明 \\r\\n\\r\\n 用於終止標頭清單,但現場的許多伺服器也會接受 \\n\\n。如果攻擊者能控制傳遞給 Slilm-Psr7 的標頭名稱,便能蓄意製作無效訊息,可能導致應用程式錯誤,或是傳送無效的 HTTP 要求,並由 PSR-18 HTTP 用戶端傳送出去。後者可能會呈現阻斷服務向量,如果是遠端服務的網路應用程式防火牆會禁止該應用程式,因為收到格式錯誤的要求。
受影響的版本
低於 1.6.1 的所有版本。
修補
此問題在版本 1.6.1 中獲得修補。
替代方案
在 Slim-Psr7 1.6.0 及更舊版本中,驗證 HTTP 標頭金鑰和/或值,如果是使用使用者提供的值,請過濾它們以在呼叫 withHeader() 之前移除開頭或結尾的新行字元。
例如
$request = $request->withHeader(trim($headerName), trim($headerValue));
致謝
我們非常感謝,並感謝 Graham Campbell 報告此問題,提供修補程式並在這個問題上與我們合作。