如果 CR/LF 被剥离,是否可以进行 HTTP 标头注入?

信息安全 Web应用程序 攻击 http 注射 响应分裂
2021-08-21 12:51:53

在 HTTP 响应中有以下带有攻击者控制内容的标头:

Content-Disposition:attachment; filename="attacker_controlled.html"

唯一不能出现在攻击者控制值中的字符是 [CR] 和 [LF](它们不能以任何组合出现)。在我读到 HTTP 标头注入的所有地方,都被告知要注入这些字符。

是否可以在没有 CRLF的情况下进行 HTTP 标头注入或其他有害攻击?

2个回答

看你说的剥离是什么意思。(python 的string.strip()方法只从开头和结尾删除出现,这不会停止 CRLF 注入。)如果您要替换所有出现的“\r\n”,那么您仍然容易受到HTTP 响应拆分的影响。这是因为我所知道的每个 http 客户端和服务器也单独将“\n”字符识别为分隔符。尽管在这种情况下,我们只关心浏览器。

始终将所有出现的换行符“\n”替换为没有任何内容“”和“\r”没有任何内容“”的最佳方法,分别为好衡量标准。我从未见过只寻找“\r”的 HTTP 协议的植入,所以据我所知,这对安全性影响为零,但无论如何你都应该这样做。如果您还担心 HTTP 属性,那么您还需要去除“”、“\””和“;”,但这也取决于攻击者控制的字符串在 http 标头中的位置。

在您提到的条件下,我不知道有什么方法可以进行 HTTP 标头注入。

但是,还有其他风险,例如路径遍历攻击、下载活动内容或覆盖系统标准文件。我建议阅读RFC 6266, Section 4.3RFC 2183, Section 5,其中描述了一些风险。(RFC 6266 是定义 Content-Disposition 标头的标准。)如果您允许攻击者同时控制文件名和文件内容,请参阅此博客文章以了解有关 XSS 风险的讨论。