一、禁止网页所有请求发送 reffer
Html中添加<meta name="referrer" content="never"> ,用于控制浏览器在发起 HTTP 请求时如何处理 Referer 头。它影响网页向其他资源发送请求时,是否包含来源页面的 URL 信息。
referrer 属性的选项
- "no-referrer" : 浏览器不发送
Referer头。 - "no-referrer-when-downgrade" (默认): 如果从 HTTPS 页面请求 HTTP 资源,则不发送
Referer头。否则发送完整的 URL。 - "origin" : 浏览器发送来源页面的根 URL(不包含路径和参数)。
- "origin-when-cross-origin" : 对同源请求发送完整 URL,对跨域请求发送根 URL。
- "same-origin" : 仅对同源请求发送
Referer头。 - "strict-origin" : 对跨协议(HTTPS 到 HTTP)请求不发送
Referer头,对同协议跨域请求发送根 URL。 - "strict-origin-when-cross-origin" : 同源请求发送完整 URL,跨协议请求不发送
Referer头,跨域同协议请求发送根 URL。 - "unsafe-url" : 无论请求是否跨域或跨协议,始终发送完整 URL。
- "never" : 浏览器不发送
Referer头(等同于 "no-referrer")。
示例
使用 <meta name="referrer" content="never">,可以确保浏览器在请求资源时不发送 Referer 头。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Referrer Policy Example</title>
<meta name="referrer" content="never">
</head>
<body>
<h1>Referrer Policy Example</h1>
<p>This page has a referrer policy that never sends the referrer header.</p>
<a href="https://example.com">Link to Example.com</a>
<script>
// Example script to fetch data
fetch('https://example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
</script>
</body>
</html>
在这个示例中,页面设置了 referrer 策略为 "never",因此浏览器在点击链接或进行网络请求时都不会发送 Referer 头。
使用场景
- 隐私保护: 防止向目标网站泄露来源页面的 URL。
- 安全考虑: 避免敏感信息通过
Referer头暴露。
通过 <meta name="referrer" content="never">,你可以控制页面的 Referer 头发送策略,提升隐私和安全性。
二、只禁止图片请求发送reffer
HTML 的 <img> 标签有一个 referrerPolicy 属性,可以用来设置在加载图片时发送的 Referer 头的策略。这个属性控制浏览器在请求图片资源时是否发送以及如何发送 Referer 头。
referrerPolicy 属性的值
referrerPolicy 属性可以设置为以下值:
**no-referrer**: 浏览器不发送Referer头。**no-referrer-when-downgrade**: 如果从 HTTPS 页面请求 HTTP 资源,则不发送Referer头。否则发送完整的 URL。这是默认值。**origin**: 浏览器发送来源页面的根 URL(不包含路径和参数)。**origin-when-cross-origin**: 对同源请求发送完整 URL,对跨域请求发送根 URL。**same-origin**: 仅对同源请求发送Referer头。**strict-origin**: 对跨协议(HTTPS 到 HTTP)请求不发送Referer头,对同协议跨域请求发送根 URL。**strict-origin-when-cross-origin**: 同源请求发送完整 URL,跨协议请求不发送Referer头,跨域同协议请求发送根 URL。**unsafe-url**: 无论请求是否跨域或跨协议,始终发送完整 URL。
示例
禁止发送 Referer 头
<img src="https://example.com/image.jpg" referrerPolicy="no-referrer" alt="Example Image">
仅发送来源页面的根 URL
<img src="https://example.com/image.jpg" referrerPolicy="origin" alt="Example Image">
默认行为(no-referrer-when-downgrade)
<img src="https://example.com/image.jpg" referrerPolicy="no-referrer-when-downgrade" alt="Example Image">
仅对同源请求发送 Referer 头
<img src="https://example.com/image.jpg" referrerPolicy="same-origin" alt="Example Image">
使用场景
- 隐私保护: 如果你不希望在请求第三方资源时泄露来源页面的 URL 信息,可以使用
no-referrer或origin等策略。 - 安全性: 在 HTTPS 页面中请求 HTTP 资源时,可以使用
no-referrer-when-downgrade或strict-origin来防止泄露敏感信息。 - 兼容性: 根据具体需求选择合适的
referrerPolicy值,以确保兼容性和功能性。
注意事项
referrerPolicy只能在支持它的浏览器中生效。大多数现代浏览器都支持这个属性,但在使用时仍需考虑兼容性。- 设置不当可能会影响某些分析或追踪功能,因为这些功能依赖于
Referer头来识别来源页面。
三、除了img 还有哪些标签支持 referrerPolicy 属性
这些标签主要是那些会发起网络请求来加载资源的标签。以下是支持 referrerPolicy 属性的一些常用标签:
支持 referrerPolicy 属性的标签
-
<a>- 用于定义超链接。
- 示例:
<a href="https://example.com" referrerPolicy="no-referrer">Example Link</a>
-
<area>- 用于在图像映射中定义可点击区域。
- 示例:
<map name="example-map">
<area shape="rect" coords="34,44,270,350" href="https://example.com" alt="Example Area" referrerPolicy="no-referrer">
</map>
-
<iframe>- 用于嵌入另一个 HTML 页面。
- 示例:
<iframe src="https://example.com" referrerPolicy="no-referrer"></iframe>
-
<link>- 用于定义文档与外部资源的关系(如样式表)。
- 示例:
<link rel="stylesheet" href="https://example.com/style.css" referrerPolicy="no-referrer">
-
<script>- 用于嵌入或引用外部 JavaScript 代码。
- 示例:
<script src="https://example.com/script.js" referrerPolicy="no-referrer"></script>
-
<form>- 用于定义一个表单。
- 示例:
<form action="https://example.com/submit" referrerPolicy="no-referrer">
<input type="text" name="example" value="example">
<button type="submit">Submit</button>
</form>
总结
通过为这些标签设置 referrerPolicy 属性,可以更好地控制在请求资源时发送的 Referer 头,保护用户的隐私并增强网页的安全性。这些标签包括但不限于 <a>, <area>, <iframe>, <link>, <script>, 和 <form>。根据具体需求选择合适的策略值,确保应用的安全性和隐私保护。