为什么我不能通过 php cURL 抓取远程站点数据?



我曾经通过php cURL从远程网站抓取数据。我现在甚至可以从除一页以外的所有其他页面抓取数据。来自php cURL的标头显示以下内容:

HTTP/1.1 200 OK Date: Tue, 24 Dec 2019 05:44:17 GMT Server: Apache Content-Length: 14 Content-Type: text/html; charset=UTF-8 X-XSS-Protection: 1;mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Strict-Transport-Security: max-age=31536000;includeSubDomains;preload X-Frame-Options: sameorigin

任何人都知道为什么会发生这种情况,解决方案是什么?

我也不是专家,但是当我对返回的标头的所有子组件进行简单的Google搜索时,这就是我发现的:

第 1 部分:X-XSS-Protection: 1;mode=block:此标头用于防止跨站点脚本攻击。MDN 文档指出:

启用 XSS 筛选。如果检测到攻击,浏览器将阻止页面呈现,而不是清理页面。

第 2 部分:X-Content-Type-Options: nosniff:此标头可防止基于 MIME 的攻击。MDN 文档指出:

此标头由 IE 8 中的 Microsoft 引入,作为网站管理员阻止正在发生的内容嗅探的一种方式,并且可以将不可执行的 MIME 类型转换为可执行的 MIME 类型。从那时起,其他浏览器也引入了它,即使他们的MIME嗅探算法不那么激进。

第 3 部分:Referrer-Policy: no-referrer-when-downgrade:MDN 文档指出:

当协议安全级别保持不变(HTTP→HTTP、HTTPS→HTTPS(或改进(HTTP→HTTPS(时,URL 的来源、路径和查询字符串将作为引荐来源发送,但不会发送到安全性较低的目标 (HTTPS→HTTP(。

第 4 部分:Strict-Transport-Security: max-age=31536000;includeSubDomains;preload:此标头可防止中间人攻击。MDN 文档指出:

HTTP

严格传输安全标头通知浏览器,它不应使用 HTTP 加载站点,而应自动将使用 HTTP 访问站点的所有尝试转换为 HTTPS 请求。

部分5:X-Frame-Options: sameorigin:此标头用于防止点击劫持攻击。MDN 文档指出:

X-Frame-Options HTTP响应头可用于指示是否应允许浏览器以<frame><iframe><embed><object>呈现页面。网站可以使用它来避免点击劫持攻击,方法是确保其内容未嵌入到其他网站中。

因此,请确保您没有犯上述任何错误(例如加载非https版本的页面,或嗅探MIME标头等(,并且您应该很好地加载页面的内容。

最新更新