CRLF 简介
CRLF的含义是回车和换行。这些元素嵌入在HTTP标头和其他软件代码中,以表示行尾(EOL)标记。当攻击者能够将CRLF序列注入HTTP流时,就会出现漏洞。通过引入这种意外的CRLF注入,攻击者能够恶意利用CRLF漏洞来操纵Web应用程序的功能。
CRLF 攻击示例
攻击者通过接口访问网站时,可以在参数中添加\r\n,然后再输入“connect failed”之类的误导性信息,如果攻击成功的话,日志中就会出现换行,在新行中出现“connect failed”,这样,就有可能导致管理员花费很多精力去解决一个不存在的错误。
CRLF注入的修复建议
CRLF注射很容易预防:
- 始终遵循永不信任用户输入的规则。
- 清理并中和所有用户提供的数据或正确编码HTTP标头中的输出,否则这些输出将对用户可见,以防止注入CRLF序列及其后果。
CRLF防御示例
例如有个post请求,localhost:8080/appPay/newOrder ,请求参数如下所示:
{
"orderId":"89077",
"skuId":"1",
"order":"1istainjection\r\n order created success!"
}
我们可以考虑以下方案:
1.在对应业务代码中提前对参数进行校验,去除特殊字符串
2.添加过滤器
首先方案1的话,属于头疼医头,脚疼医脚,如果被攻击的业务比较多的话,改起来相当麻烦
方案2 的话,我们需要实现一个类继承HttpServletRequestWrapper,从而获取HttpServletRequest传过来的参数值,