知识卡片

用随机化或加密打破不受信任透明代理的篡改与缓存

普通读书笔记卡

内容

国内互联网存在多家ISP运营商,运营商之间跨网访问会产生”跨网间结算”成本,一些小地区、小运营商为了省下这笔结算费用,会在客户端和真实服务器之间搭建HTTP代理,悄悄把请求的资源缓存下来直接返回,绕开真正的跨网请求——这类未经授权的透明代理会带来实际的问题:例如某些代理实现有Bug,遇到带Range头(断点续传/分段请求)的请求会丢掉Range信息、把整个文件都返回,导致客户端请求失败;还有代理会错误地把多个不同请求的HTTP头拼接在一起,造成服务器解析出错。书中给出的两种应对思路:一是在请求的URL或HTTP头中加入随机信息(比如随机路径),让这类基于URL做简单匹配缓存的代理无法命中缓存、被迫放行请求;二是直接换用HTTPS协议传输,代理连内容都无法解密查看,自然也就没法做这类干预。这个案例给出一条通用思路:当请求路径上存在不受信任、无法直接移除的中间代理环节时,要么用不可预测性(随机化标识)让对方的缓存/干预机制失效,要么用加密让对方彻底失去介入的能力,两者都是绕开、而非正面对抗中间环节的思路。

参考来源

- 位置:《高可用架构(第1卷)》第7章《安全与网络》"7.3 CDN对流媒体和应用分发的支持及优化"节,"7.3.2 网络分发过程中ISP的影响","2.运行商结算对HTTP协议的缓存影响"(源文件:_epub-src/OEBPS/Text/Chapter7_3_3.xhtml) - 结论依据:原文说明"一些地方的服务器(小运营商、小地区)会进行HTTP请求缓存……对于含有Range请求的HTTP服务器,该代理丢掉了Range信息,将整个文件都返回给了客户……对于这类问题,一般可以尝试在HTTP头和URL参数中添加随机信息来避免……另一种解决方法是使用HTTPS协议传输数据,可以防止用于请求被篡改",直接支撑本卡片结论。 - 原始内容:对于这类问题,一般可以尝试在HTTP头和URL参数中添加随机信息来避免。这种思路的常见解决办法是在请求的链接中直接包含随机路径,使上述的缓存服务器无法缓存所有的信息。另一种解决方法是使用HTTPS协议传输数据,可以防止用于请求被篡改。