【发布时间】:2023-03-10 04:10:01
【问题描述】:
只需查看整个 HTTP 网络浏览会话的 tcp 捕获, 是否可以区分用户发起的 Web 请求(通过单击链接或在地址栏中输入 url)和由于以下原因发出的 Web 请求(由浏览器)网页对象(图像、iframe、ajax 等)。
Referer Header 不满足要求,因为在用户发起的对链接的点击和浏览器对该页面上的网页对象的请求的情况下,它的值是相同的。
【问题讨论】:
只需查看整个 HTTP 网络浏览会话的 tcp 捕获, 是否可以区分用户发起的 Web 请求(通过单击链接或在地址栏中输入 url)和由于以下原因发出的 Web 请求(由浏览器)网页对象(图像、iframe、ajax 等)。
Referer Header 不满足要求,因为在用户发起的对链接的点击和浏览器对该页面上的网页对象的请求的情况下,它的值是相同的。
【问题讨论】:
对此没有简单的解决方案,我怀疑它甚至可以可靠地完成,但这里有一些关于如何分多个步骤过滤数据的提示:
保持活动状态: HTTP 允许同一 TCP 连接上的多个顺序请求(如果支持 keepalive)。假设只有 TCP 连接上的第一个请求可能是用户发起的,其余的应该是与该页面相关的图像/脚本,这可能是安全的。这应该会显着减少您需要进一步分析的请求数量。
Content-Type:如果您准备假设只有 HTML 是通过用户发起的请求下载的,您可以过滤掉任何响应与某个 Content-Type 不匹配的内容(例如文本/html)
响应正文:您现在只剩下 HTML 响应,但是查看请求/响应标头几乎不可能区分 iframe 请求和单击的链接,因为 Referer在这两种情况下都是相同的(尽管大多数 iframe 下载可能已在步骤 1 中被过滤掉)。为了进一步完善这一点,您必须解析每个 HTML 响应并查找任何可能导致非用户发起的 HTML 下载的 <iframe src="..." 或 <link rel="prefetch",然后过滤掉针对这些资源发出的请求。
这些都不能构成完美的分析,但对于您的目的来说可能已经足够了。例如,检测来自<meta> 刷新的请求可能是不可能的。
【讨论】:
X-Requested-With: XMLHttpRequest 请求标头,它可以帮助您识别它们。同样,没有万无一失的解决方案,但它可能足以满足您的需求。