反向代理AccessLog异常:无前置GET的iPhone Safari POST请求排查
无前置GET请求的异常POST请求诱因分析
问题背景
正常用户请求流程分为两步:
- 发送GET请求获取带表单的页面:
XXX.XXX.XXX.XXX www.example.de - [25/Jul/2023:07:31:01 +0200] "GET /routetoform/ HTTP/1.1" 200 T ORIGIN "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) EdgiOS/114.0.1823.82 Version/16.0 Mobile/15E148 Safari/604.1"
- 提交表单发送POST请求:
XXX.XXX.XXX.XXX www.example.de - [25/Jul/2023:07:33:11 +0200] "POST /routetoform/ HTTP/1.1" 200 T ORIGIN "Mozilla/5.0 (iPhone; CPU iPhone OS 16_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) EdgiOS/114.0.1823.82 Version/16.0 Mobile/15E148 Safari/604.1"
但在分析反向代理AccessLog时发现大量异常情况:直接发起POST请求,无对应前置GET记录,且所有这类请求的User Agent均为上述特定的iPhone Safari标识。已排除用户设备POST前更换IP的可能——遍历所有该UA的请求记录,未找到匹配的前置GET请求。
以下是对该异常的可能诱因分析:
可能诱因
- 客户端缓存复用:用户此前用该UA访问过表单页面,浏览器将页面完整缓存,再次提交时直接调用缓存中的表单发起POST,未触发新的GET请求。可检查表单页面的缓存策略,是否允许长期缓存,或存在用户强制缓存的情况。
- 伪造UA的自动化提交:虽然该UA不属于典型爬虫,但不排除恶意工具或脚本伪造了这个UA,直接构造POST请求提交数据。这类工具通常通过抓包获取接口参数后,绕过获取表单的步骤重复提交。
- 表单被嵌入第三方页面:表单可能通过iframe等方式嵌入到其他网站,用户在第三方页面直接提交表单,此时GET请求由第三方域名发起,不会出现在当前反向代理的AccessLog中,只有POST请求会指向目标域名。
- 浏览器预加载机制:部分浏览器的预加载功能可能在用户未主动访问时就获取了表单页面,但这类预加载请求的日志可能被过滤(如状态码、请求规则不符合日志记录条件),或请求特征与正常GET不同,导致日志中无记录,后续用户提交时直接使用预加载资源。
- 移动设备特殊行为:iOS系统或EdgiOS浏览器的后台刷新、快捷指令、Siri捷径等功能,可能触发直接提交表单的行为,对应的GET请求可能在后台完成,或未被日志捕获。
- 日志记录不完整:反向代理的日志配置可能存在遗漏,比如某些GET请求因状态码、请求参数或其他规则未被记录,导致看起来没有前置GET,但实际上请求已发生。需检查日志的过滤规则和完整性。
内容的提问来源于stack exchange,提问作者Urkusk Shrakz
相关产品推荐
相关产品推荐

