### CL-CL
假设中间的代理服务器和后端的源站服务器在收到类似的请求时,都不会返回400错误,但是中间代理服务器按照第一个`Content-Length`的值对请求进行处理,而后端服务器按照第二个`Content-Length`的值进行处理。这样有可能引发请求走私。
“`bash
POST / HTTP/1.1\r\n
Host: example.com\r\n
Content-Length: 8\r\n
Content-Length: 7\r\n
12345\r\n
a
“`
前端代理服务器获取的数据包长度为 8,将以上数据包完整转发至后端服务器,但后端服务器仅接收长度为7的数据包。因此读取前7个字符后,后端服务器认为本次请求已经读取完毕,然后返回响应。
但此时缓冲区仍留下一个a,对于后端服务器来讲,这个a是下一个请求的一部分,但没传输完毕。如果此时传来一个请求
“`
GET / HTTP/1.1
HOST: test.com
“`
那么前端服务器和后端服务器将重用TCP连接,使后端实际接收的请求为:
“`
aGET / HTTP/1.1
HOST: test.com
“`
从而实现了一次HTTP请求攻击。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
请登录后查看评论内容