http-header安全字段总结

admin 2024年1月28日12:03:39评论20 views字数 4226阅读14分5秒阅读模式

这是整理网络上的各处内容的总结,有官方文档、有常见经验。在本文中,我将讨论应在Web服务器上配置哪些重要的HTTP标头,以提高服务器安全性。你将了解每个标头的作用是什么,以及利用其错误配置可以实施哪些攻击。以下是我将讨论的有趣HTTP标头的类型:

防止攻击的服务器http标头

  • HTTP严格传输安全性

  • 内容安全政策

  • 访问控制允许来源

  • X-FrameOptions

  • X-XSS-Protection

  • X-Content-Type-Options

泄漏信息的服务器标头

  • Server

  • X-Powered-By

  • X-AspNet-Version

HTTP标头的背景

客户端和Web服务器使用HTTP标头作为HTTP协议的一部分来共享信息。当我在浏览器的地址栏中输入URL或单击任何链接时,Web浏览器会发送包含客户端标头的HTTP请求,这时候HTTP响应会包含服务器标头。
不同HTTP标头,不过解释它们不是本文的目的。在Mozilla的HTTP标头页面上找到每个标头的参考和详细信息。我将讨论具有安全性影响的HTTP服务器标头。

防止攻击的服务器标头

1. HTTP严格传输安全(HSTS)

HTTP严格传输安全性指示浏览器仅通过HTTPS访问Web服务器。在服务器上配置后,服务器将响应中的标头发送为Strict-Transport-Security。收到此标头后,浏览器将仅通过HTTPS将所有请求发送到该服务器。HSTS标头有3个指令:

  • Max-age:这定义了仅通过HTTPS访问Web服务器的时间。此标头的默认值为31536000秒。这是HSTS有效的最长年龄(时间)。服务器会在每次新响应时更新此时间,从而防止其过期。

  • IncludeSubDomains:这适用于网站子域的控制。

  • Preload:Preload是硬编码到Google Chrome浏览器中的网站列表,只能通过HTTPS进行通信。网站的所有者可以提交其URL以包含在预加载列表中。此列表由Google维护,不过很多其他浏览器也使用它。可以在此处找到预加载列表:https://chromium.googlesource.com/chromium/src/+/master/net/http/transport_security_state_static.json

攻击场景

如果未启用HSTS,攻击者可以执行中间人攻击并从用户的Web会话中窃取敏感信息。想象一下,受害者连接到实际上是在攻击者的控制之下开放式Wi-Fi的时候。通过HTTP访问网站将允许攻击者拦截请求并读取敏感信息。(该站点使用HTTPS,但用户使用HTTP访问它,后来将其重定向到HTTPS)。如果同一用户之前访问过该网站,则浏览器中记录的HSTS详细信息将导致自动通过HTTPS建立连接。

2.内容安全政策

内容安全策略用于指示浏览器仅加载策略中定义的允许内容。这使用白名单方法告诉浏览器从哪里加载图像,脚本,CSS,小程序等。如果正确实施,此策略可防止利用跨站点脚本(XSS),ClickJacking和HTML注入攻击。

报头的名称是Content-Security-Policy其值可以用以下指令来定义:default-src,script-src,media-src,img-src。它们指定浏览器应加载这些类型资源(脚本,媒体等)的来源。

以下是一个示例设置:
Content-Security-Policy: default-src 'self'; media-src media123.com media321.com; script-src script.com; img-src *;
这被浏览器解释为:

  • default-src 'self':从当前域加载所有内容

  • media-src media123.com media321.com:媒体只能从media1.com和media2.com加载

  • script-src script.com:脚本只能从script.com加载

  • img-src *:可以从Web中的任何位置加载图像

有关内容安全策略的更多信息,请访问Mozilla。

3.访问控制允许原点

Access-Control-Allow-Origin是一个CORS(跨源资源共享)标头。此标头允许定义的第三方访问给定资源。此标题是同源策略所引起的限制的解决方法,它不允许两个不同的来源读取彼此的数据。

例如,如果站点ABC想要访问站点XYZ的资源,站点XYZ将使用站点ABC的Access-Control-Allow-Origin的地址响应。通过这种方式,站点XYZ告诉浏览器谁被允许访问其内容:

Access-Control-Allow-Origin: SiteABC.com

攻击场景

如果Access-Control-Allow-Origin配置不当,攻击者可以使用其他第三方网站从目标网站读取数据。许多开发人员使用通配符作为Access-Control-Allow-Origin标题,允许任何网站从他们的网站读取数据。

4. Set-Cookie

应用程序设置的cookie值由Set-Cookie标头中的服务器发送。收到此标头后,浏览器将在Cookie标头中发送每个HTTP请求的cookie 。

HTTP cookie通常包含敏感信息(尤其是会话cookie),需要保护它们以防止未经授权的访问。
可以设置以下属性来保护cookie:

  • Secure:使用此属性设置的cookie将仅通过HTTPS发送,而不是通过明文HTTP协议(易受删除的方式)发送。

  • HTTPOnly:浏览器不允许JavaScript代码访问使用此属性设置的cookie的内容。这有助于通过XSS攻击减轻会话劫持。

5. X-FrameOptions

此标头用于通过禁止浏览器在iframe元素中加载页面来保护用户免受点击劫持的攻击。
有3个指令可以设置:

  • X-Frame-Options:DENY - 这不允许在任何网站的框架中加载页面。

  • X-Frame-Options:sameorigin - 这将允许页面仅在原始frame相同的情况下加载到帧中,即www.site.com上的页面仅在frame所在的父页面上加载,被加载的域相同(www.site.com)。

  • X-Frame-Options:allow-from uri - farme框架结构只能显示在指定域/源的帧中。
    ### 攻击场景
    攻击者可以欺骗用户访问恶意网站,恶意网站会将目标应用程序加载到不可见的iframe中。当用户点击恶意应用程序(例如基于网络的游戏)时,点击将被“窃取”并发送到目标应用程序(点击劫持)。因此,用户将在未经他同意的情况下点击合法应用程序,这可能导致执行一些不需要的操作(例如删除帐户等)。

6. X-XSS保护

此标头旨在防止跨站点脚本攻击。它适用于现代浏览器使用的XSS过滤器,它有3种模式:

  • X-XSS-Protection:0; - 值为0将禁用XSS过滤器

  • X-XSS-Protection:1; - 值为1将启用过滤器,如果检测到XSS攻击,浏览器将清理页面内容以阻止脚本执行。

  • X-XSS-Protection:1; mode = block - 值为1,启用block mode的时候,如果检测到XSS攻击,则使用块模式的值1的处理。

7. X-Content-Type-Options

此响应标头用于防止MIME嗅探漏洞。什么是MIME嗅探?MIME嗅探是Web浏览器的一项功能,用于检查所服务文件的内容。它的工作原理如下:

  • Web浏览器请求文件。服务器发送带有HTTP标头Content-Type的文件。

  • Web浏览器“嗅探”此文件的内容以确定文件格式。

  • 完成分析后,浏览器会将其结果与服务器发送的结果进行比较。如果不匹配,浏览器将使用标识的格式。

这可能会导致安全漏洞。下面来看一看?

攻击场景

  • 应用程序允许用户上传图像文件并验证其扩展名

  • 用户上传带有jpg或png扩展名的图像文件,但此文件也包含恶意HTML代码

  • 浏览器使用包含代码的HTML呈现文件并在浏览器中执行
    通过将标头设置X-Content-Type-Optionsnosniff,浏览器将不再“嗅探”所接收文件的内容,而是使用Content-Type标头中的值。此标头专用于IE和Chrome浏览器。

此标头可以与另外两个标头一起使用,以增强安全性。

  • Content-Disposition:它强制浏览器显示弹出文件以下载文件pentest.html。Content-Disposition: attachment; filename=pentest.html

  • X-Download-Options:当此标头设置为noopen时,用户被迫在打开之前首先在本地保存文件,而不是直接在浏览器中打开文件

泄漏信息的服务器标头

1.Server:

此标头包含有关后端服务器(类型和版本)的信息。例如,下面的屏幕截图显示运行Nike网页的Web服务器是Jetty版本9.4.8.v20171121

具有此知识的对手可能会查找特定于Jetty版本9.4.8的漏洞。此信息可在公共漏洞数据库中找到,例如:

  • https://nvd.nist.gov

  • https://cve.circl.lu

  • https://www.securityfocus.com/bid

您只需要搜索特定的产品和版本。以下是影响Jetty Web服务器的漏洞:

  • https://nvd.nist.gov/vuln/search/results?form_type=Basic&results_type=overview&query=jetty&search_type=all

2. X-Powered-By:

包含Web应用程序中使用的Web框架或编程语言的详细信息。例如,https://msc.mercedes-benz.com上的Web应用程序是使用PHP 7.1.22和托管的Plesk

3. X-AspNet-version:

顾名思义,它显示了ASP .NET框架的版本细节。这些信息可以帮助攻击者根据框架及其版本进行攻击。

结论

可以在服务器上配置特定HTTP标头,以增强Web应用程序的整体安全性。这些标头不会使应用程序更安全,但它们会减少利用应用程序的潜在漏洞的可能性。

来源:https://xz.aliyun.com/ 感谢【bycsec


原文始发于微信公众号(船山信安):http-header安全字段总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月28日12:03:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   http-header安全字段总结http://cn-sec.com/archives/2438406.html

发表评论

匿名网友 填写信息