提问人:now he who must not be named. 提问时间:2/14/2022 更新时间:2/14/2022 访问量:444
如何允许换行符,但仍能防止CRLF攻击?
How to allow newline characters but still prevent CRLF attack?
问:
我已经在我的服务器上运行了安全扫描,并收到了一些 CRLF 漏洞利用警告。
因此,按照建议,我已经清理了所有查询参数输入,如下所示。
var encodedStringSafeFromCRLF = Server.UrlDecode(Request.QueryString["address"])
.Replace("\r", string.Empty)
.Replace("%0d", string.Empty)
.Replace("%0D", string.Empty)
.Replace("\n", string.Empty)
.Replace("%0a", string.Empty)
.Replace("%0A", string.Empty);
比方说,一个真正的用户正在通过“address”查询参数向我发送一个地址。
例-
https://mywebsite.com/details?instId=151711&address=24%20House%20Road%0aSomePlace%0aCountry
由于“%0A”将从上述字符串中剥离,因此地址现在将变为 “24HouseRoadSomePlaceCountry”,这不是我的期望。
我应该如何处理这个问题? 如果我对 CRLF 进行代码更改,这将更改输入的集成方式。 如果输入字符串未经过审查,那么它将打开我的服务器进行 CRLF 攻击。
这里有什么建议吗?
答:
1赞
Mikael Suokas
2/14/2022
#1
如果您确实需要用户提供带有 CRLF 序列的数据,那么我不会过滤这些序列。与往常一样,永远不要以任何方式信任用户提供的数据:不要使用它来生成 HTTP 标头、响应或写入日志文件。
一般来说,反之亦然的过滤更安全:指定所有你愿意接受的字符,并过滤掉其他所有字符。
如果需要将数据写入日志,例如,可以先对数据进行 URL 编码,这样就不会将“裸”CR LF 写入其中。
我可能会在内部指定仅使用 \n 作为换行符,并在内部将所有 \r、\n 和 \r\n 转换为一种表示形式 \n。因此,代码的其余部分不必处理所有版本。
下一个:本地到云漏洞扫描
评论