HTTP 请求头安全方案

请求头安全性

1. X-Content-Type-Options(内容嗅探)

过去,浏览器(包括 Internet Explorer)会尝试使用内容嗅探来猜测请求的内容类型。 这允许浏览器通过猜测未指定内容类型的资源上的内容类型来改善用户体验。 例如,如果浏览器遇到未指定内容类型的 JavaScript 文件,它将能够猜测内容类型,然后运行它。
内容嗅探的问题在于,这允许恶意用户使用多语言(即,作为多种内容类型有效的文件)来执行 XSS 攻击。 例如,某些网站可能允许用户向网站提交有效的 postscript 文档并查看它。 恶意用户可能会创建一个 postscript 文档,该文档也是一个有效的 JavaScript 文件,并对其执行 XSS 攻击。

# 关闭内容嗅探
X-Content-Type-Options: nosniff
2. Strict-Transport-Security(HSTS)

目前HTTPS网站存在下面弱点:

  1. 当用户在浏览器中输入www.baidu.com,浏览器默认会将访问http://www.baidu.com,而不是https://www.baidu.com。将由服务器将http请求重定向到https,但这将消耗服务器的性能资源。
  2. 当HTTPS网站中使用的是自签名证书(或者不在浏览器的证书信任列表中),浏览器会发出网站存在安全风险警告,但不会中止HTTPS网站访问,并询问用户是否信任该证书,继续访HTTPS网站。

安全风险由用户决定。我们fiddler抓取HTTPS网站时,网站的证书已经被fifdler截获,而此浏览器中显示的证书,为fiddler创建的证书,所以也会报警告(也叫中间人攻击)。
通过设置HSTS可以消除上面的威胁。那HSTS是如何做到的呢?需要服务器和客户端(浏览器)如何配合呢?

参数意思:在172800秒内,浏览器只要再向百度或其子域名发送HTTP请求时,由浏览器自动转成HTTPS来发起连接。这样可以减少服务器重定向的处理和被中间人截获请求的风险。

# 开启HSTS(允许子域)
strict-transport-security: max-age=15552000; includeSubDomains
3. X-Frame-Options(点击劫持)

让您的网站添加到框架中可能是一个安全问题。 例如,通过使用巧妙的CSS样式,用户可能会被诱骗点击他们不想要的东西。 例如,登录到其银行的用户可能会单击向其他用户授予访问权限的按钮。 这种攻击被称为点击劫持。

  1. DENY 表示文件無論如何都不能被嵌入到 frame 中,即使是自家網站也不行。
  2. SAMEORIGIN 唯有當符合同源政策下,才能被嵌入到 frame 中。
  3. ALLOW-FROM uri 唯有列表許可的 URI 才能嵌入到 frame 中。

解决点击劫持问题的现在解决方法是使用 X-Frame-Options 标头。 默认情况下:

# 無論如何都不能被嵌入到 frame 
X-Frame-Options: DENY
4. X-XSS-Protection(xss过滤)

某些浏览器内置支持过滤掉反射的 XSS 攻击。 该过滤器已在主要浏览器中弃用,当前的 OWASP 建议是将标头显式设置为 0。
X-XSS-Protection有四种语法:

  1. X-XSS-Protection : 0 表示禁用 XSS 过滤这个功能
  2. X-XSS-Protection : 1 表示启用 XSS 过滤
  3. X-XSS-Protection : 1; mode=block 如果检测到攻击,浏览器不会像上面的选项一样将不安全的部分删除,而是直接阻止整个页面的加载
  4. X-XSS-Protection : 1; report= 如果检测到跨站脚本攻击,浏览器会清除在页面上检测到的不安全的部分,并使用report-uri的功能 POST 一个 XSS 警报。这个功能只有在 Chrome 中有效果,在 IE 中无效。
# 发现xss攻击停止加载页面
x-xss-protection: 1; mode=block
5. Content-Security-Policy(CSP内容安全策略)

内容安全策略 (CSP) 是 Web 应用程序可用于缓解内容注入漏洞(如跨站点脚本 (XSS))的一种机制。 CSP 是一种声明性策略,它为 Web 应用程序作者提供了一种工具,用于声明并最终通知客户端(用户代理)有关 Web 应用程序期望从中加载资源的源。

内容安全策略并非旨在解决所有内容注入漏洞。 相反,您可以使用 CSP 来帮助减少内容注入攻击造成的危害。 作为第一道防线,Web 应用程序作者应验证其输入并对其输出进行编码。

Web 应用程序可以通过在响应中包含以下 HTTP 标头之一来使用 CSP:
script-src

# 不检查该域名下的脚本资源
Content-Security-Policy: script-src https://trustedscripts.example.com

report-uri

# report-uri: 发现异常加载资源后调用report-uri接口提供异常调用数据(json格式)
Content-Security-Policy: script-src https://trustedscripts.example.com; report-uri /csp-report-endpoint/

Content-Security-Policy-Report-Only

# 如果站点违反此策略,则会将违规报告发送到指令指定的声明 URL,但仍允许加载违规资源
Content-Security-Policy: script-src https://trustedscripts.example.com; report-uri /csp-report-endpoint/
6. Referrer-Policy(来历政策)

引荐来源网址策略是 Web 应用程序可用于管理来源网址字段的一种机制,其中包含最后一个用户所在的页面。
参考文档

协议描述
no-referrer最简单的策略是no-referrer(无引用者),它指定不会将来源信息与来自任何源的特定信息请求客户端。referrer 将是完全省略。
no-referrer-when-downgrade会发送完整的网址以及来自受TLS保护的环境设置的请求配置 ,以及来自不受 TLS 保护的客户端对任何源的请求。另一方面,从受 TLS 保护的客户端到非潜在可信 URL的请求将不包含 referrer 信息。HTTP 请求头Referer
same-origin指定 完整的 URL(剥离以用作referrer来源网址)将作为 从特定客户端发出同源请求时的referrer信息。另一方面,跨源请求将不包含 referrer信息。HTTP 请求头不会带有referrer
origin指定仅将请求客户端源的 ASCII 序列化作为引用信息发送,在从特定客户端发出同源请求和跨源请求时。
strict-origin从受 TLS 保护的环境设置对象到可能可信的 URL,以及从不受 TLS 保护的环境设置对象到 任何来源,会发送。从受 TLS 保护的请求客户端到非潜在可信 URL 的请求将不包含 referrer 人信息。HTTP 请求头referrer
origin-when-cross-origin指定完整的 URL(剥离以用作引荐来源网址)将作为 从特定请求客户端发出同源请求时的引荐来源信息,并且从特定客户端发出跨源请求时,仅将请求客户端源的 ASCII 序列化作为引荐来源信息发送 。
strict-origin-when-cross-origin指定 完整的 URL(剥离以用作引荐来源网址)将作为 从特定请求客户端发出同源请求时的引用信息,以及发出跨源请求时仅请求客户端源的 ASCII 序列化:从受 TLS 保护的环境设置对象到可能可信的 URL,以及从不受 TLS 保护的环境设置对象到 任何来源。另一方面,从受 TLS 保护的客户端到非潜在可信 URL的请求将不包含 推荐人信息
unsafe-url指定将发送一个完整的网址(剥离以用作引荐来源网址)与 跨源请求和同源请求均来自 特定客户端。
# 如果站点违反此策略,则会将违规报告发送到指令指定的声明 URL,但仍允许加载违规资源
Referrer-Policy: same-origin
7. Feature-Policy(功能策略)

功能策略是一种机制,允许 Web 开发人员有选择地启用、禁用和修改浏览器中某些 API 和 Web 功能的行为。

# 定位功能限制
Feature-Policy: geolocation 'self'

借助功能策略,开发人员可以选择加入一组“策略”,以便浏览器对整个网站中使用的特定功能强制执行。 这些策略限制站点可以访问哪些 API,或修改浏览器对某些功能的默认行为。

8. Permissions-Policy(权限策略)

权限策略是一种机制,允许 Web 开发人员有选择地启用、禁用和修改浏览器中某些 API 和 Web 功能的行为。

# 定位功能限制
Permissions-Policy: geolocation=(self)

借助权限策略,开发人员可以选择加入一组“策略”,以便浏览器对整个网站中使用的特定功能强制执行。 这些策略限制站点可以访问哪些 API,或修改浏览器对某些功能的默认行为。

9. Clear-Site-Data(清除站点数据)

清除站点数据是一种机制,当 HTTP 响应包含以下标头时,可以通过该机制删除任何浏览器端数据(cookie、本地存储等):

# 清空数据
Clear-Site-Data: "cache", "cookies", "storage", "executionContexts"

这是一个很好的清理操作,可以在注销时执行。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果请求头中没有`origin`字段,这意味着该请求没有携带跨域请求的来源信息。在这种情况下,您可以尝试以下几种方法来处理跨域请求: 1. 检查是否真的需要跨域请求:如果您的应用程序没有跨域请求的需求,可以通过使用相对路径或在同一域名下部署相关资源来避免跨域问题。 2. 设置允许跨域请求:如果您的应用程序确实需要进行跨域请求,您可以在Nginx配置中设置允许跨域请求。例如,可以使用`add_header`指令在Nginx的响应中添加`Access-Control-Allow-Origin`头,允许指定的源进行跨域请求。以下是一个示例配置: ```nginx location / { add_header Access-Control-Allow-Origin *; # 其他配置... } ``` 上述配置中的`*`表示允许任何来源进行跨域请求。如果您只想允许特定的来源进行跨域请求,可以将`*`替换为特定的源。 请注意,这样的配置可能会存在安全风险,因为它允许任何来源进行跨域请求。在生产环境中,建议根据实际需求仅允许特定的来源进行跨域请求。 3. 考虑使用其他跨域解决方案:如果您的应用程序需要更复杂的跨域请求处理,例如需要进行身份验证或处理复杂的请求类型(如PUT、DELETE等),可以考虑使用其他跨域解决方案,如代理服务器或反向代理。 请注意,对于安全原因,应仔细评估允许跨域请求的需求,并确保您采取适当的安全措施来保护您的应用程序。 如果您有其他问题或需要更多帮助,请提供更多上下文信息,以便更好地理解您的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值