我曾经通过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 访问站点的所有尝试转换为 HTTPS 请求。
部分5:X-Frame-Options: sameorigin
:此标头用于防止点击劫持攻击。MDN 文档指出:
X-Frame-Options HTTP响应头可用于指示是否应允许浏览器以
<frame>
、<iframe>
、<embed>
或<object>
呈现页面。网站可以使用它来避免点击劫持攻击,方法是确保其内容未嵌入到其他网站中。
因此,请确保您没有犯上述任何错误(例如加载非https版本的页面,或嗅探MIME标头等(,并且您应该很好地加载页面的内容。