在本文中,我们将讨论您应在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响应会包含服务器标头。

在调用Google的网页时,这是一个HTTP请求 - 响应:

有几十个不同HTTP标头,不过解释它们不是本文的目的。您可以在Mozilla的HTTP标头页面上找到每个标头的良好参考和详细信息。

我们将讨论具有安全性影响的HTTP服务器标头。

防止攻击的服务器标头

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

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

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

攻击场景

如果未启用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中的任何位置加载图像
    #### 例子
    为dropbox.com正确设置Content-Security-Policy标头:

没有为apple.com设置Content-Security-Policy标头:

有关内容安全策略的更多信息,请访问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攻击减轻会话劫持。

例子

Cookie的属性HTTPOnly和Secure针对dropbox.com正确设置:

没有为boeing.com设置Cookie安全属性:

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中。当用户点击恶意应用程序(例如基于网络的游戏)时,点击将被“窃取”并发送到目标应用程序(点击劫持)。因此,用户将在未经他同意的情况下点击合法应用程序,这可能导致执行一些不需要的操作(例如删除帐户等)。

例子

  • X-Frame-Options标头正常使用来拒绝dropbox.com的farme加载:

  • 在ibm.com上未实现X-Frame-Options标头:

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

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

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

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

例子

在linkedin.com上正确实现了X-XSS-Protection标头:

instagram.com上缺少X-XSS-Protection标头:

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时,用户被迫在打开之前首先在本地保存文件,而不是直接在浏览器中打开文件
    #### 例子

为linkedin.com正确实现了X-Content-Type-Options标头:

XP.com上未实现X-Content-Type-Options标头:

泄漏信息的服务器标头

1.Server:

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

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

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

例子

可以通过重新配置Web服务器来屏蔽服务器信息。例如,这是Linkedin网站上的一个很好的配置(服务器名称被修改为“Play”):

2. X-Powered-By:

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

3. X-AspNet-version:

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

以下是来自http://demo.testfire.net 服务器的示例标头

结论

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

本文翻译自:https://pentest-tools.com/blog/essential-http-security-headers/
欢迎指出翻译的纰漏。

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖