• 1
  • 1
分享
  • 10个安全测试漏洞修复经验,你掌握几个
  • 曼倩诙谐 2020-10-09 10:49:37 字数 6973 阅读 4290 收藏 1

  随着互联网技术的飞速发展,业务的开展方式更加灵活,应用系统更加复杂,也因此面临着更多的安全性挑战。安全测试是在应用系统投产发布之前,验证应用系统的安全性并识别潜在安全缺陷的过程,目的是防范安全风险,满足保密性、完整性、可用性等要求。

  日常测试过程中经常遇到开发同事来询问一些常见的配置型漏洞应该如何去修复,为了帮助开发同事快速识别并解决问题,通过总结项目的安全测试工作经验,笔者汇总、分析了应用系统的一些常见配置型漏洞并给出相应的修复建议,在这里给大家进行简单的分享。


Cookie缺少HttpOnly属性

漏洞描述

  Cookie中的HttpOnly属性值规定了Cookie是否可以通过客户端脚本进行访问,能起到保护Cookie安全的作用,如果在Cookie中没有将HttpOnly属性设置为true,那么攻击者就可以通过程序(JS脚本、Applet等)窃取用户Cookie信息,增加攻击者的跨站脚本攻击威胁。窃取的Cookie中可能包含标识用户的敏感信息,如ASP.NET会话标识等,攻击者借助窃取的Cookie达到伪装用户身份或获取敏感信息的目的,进行跨站脚本攻击等。

Y1.png


修复建议

  向所有会话Cookie中添加“HttpOnly”属性。

  1)Java语言示例:

  HttpServletResponse response2 = (HttpServletResponse)response;

  response2.setHeader( "Set-Cookie", "name=value; HttpOnly");

  2)C#语言示例:

  HttpCookie myCookie = new HttpCookie("myCookie");

  myCookie.HttpOnly = true;

  Response.AppendCookie(myCookie);

  3)VB.NET语言示例:

  Dim myCookie As HttpCookie = new HttpCookie("myCookie")

  myCookie.HttpOnly = True

  Response.AppendCookie(myCookie)


加密会话(SSL)Cookie缺少secure属性

漏洞描述

  对于敏感业务,如登录、转账、支付等,需要使用HTTPS来保证传输安全性,如果会话Cookie缺少secure属性,Web应用程序通过SSL向服务器端发送不安全的Cookie,可能会导致发送到服务器的Cookie被非HTTPS页面获取,造成用户Cookie信息的泄露。如果启用了secure属性,浏览器将仅在HTTPS请求中向服务端发送cookie内容。

Y2.png


修复建议

  向所有敏感的Cookie添加“secure”属性。

  1)服务器配置为HTTPS SSL方式;

  2)Servlet 3.0环境下对web.xml文件进行如下配置:

<session-config>
     <cookie-config>
     <secure>true</secure>
     </cookie-config>
</session-config>

  3)ASP.NET中对Web.config进行如下配置:

  <httpCookies requireSSL="true" />

  4)php.ini中进行如下配置:

 session.cookie_secure = True

    或者

  void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure= false [, bool $HttpOnly= false ]]]] )

    或者

  bool setcookie ( string $name [, string $value? [, int $expire= 0 [, string $path [, string $domain [, bool $secure= false [, bool $HttpOnly= false ]]]]]] )

  5)在weblogic中进行如下配置:

  <wls:session-descriptor>
            <wls:cookie-secure>true</wls:cookie-secure>
            <wls:cookie-http-only>true</wls:cookie-http-only>
  </wls:session-descriptor>


缺少“Content-Security-Policy”头

漏洞描述

  因Web应用程序编程或配置不安全,导致HTTP响应缺少“Content-Security-Policy”头,可能产生跨站脚本攻击等隐患,可能会收集有关Web应用程序的敏感信息,如用户名、密码、卡号或敏感文件位置等。

Y3.png


修复建议

  将服务器配置为使用安全策略的“Content-Security-Policy”头。

  1)在web.config 配置文件中添加如下HTTP响应头:

 <system.webServer>
    <httpProtocol>?
      <customHeaders>
  <add name="Content-Security-Policy" value="default-src 'self';"/>
      </customHeaders>
    </httpProtocol>
  </system.webServer>

  2)使用meta标签:

 <meta http-equiv=”Content-Security-Policy” content=”default-src ‘self’”/>


缺少“X-Content-Type-Options”头

漏洞描述

  因Web应用程序编程或配置不安全,导致缺少“Content-Security-Policy”头,可能产生偷渡式下载攻击等隐患。

Y4.png


修复建议

  将服务器配置为使用值为“nosniff”的“X-Content-Type-Options”头。

  1)在web.config 配置文件中添加如下响应头:

 <add name="X-Content-Type-Options" value="nosniff"/>

  2)使用meta标签

  <meta http-equiv=”X-Content-Type-Options” content=”nosniff” />


缺少“X-XSS-Protection”头

漏洞描述

  因Web应用程序编程或配置不安全,导致缺少“Content-Security-Policy”头,可能产生跨站脚本攻击等隐患。

Y5.png


修复建议

  将服务器配置为使用值为“1”(已启用)的“X-XSS-Protection”头。

  1)在web.config 配置文件中添加如下响应头:

  <add name="X-XSS-Protection" value="1;mode=block"/>

  2)使用meta标签

 <meta http-equiv=”X-XSS-Protection” content=”1;mode=block” />


缺少“HTTP Strict-Transport-Security”头

漏洞描述

  因Web应用程序编程或配置不安全,导致缺少 HTTP Strict-Transport-Security 头。为了用户体验,有些网站允许使用HTTPS和HTTP访问,当用户使用HTTP访问时,网站会返回给用户一个302重定向到HTTPS地址,后续访问都使用HTTPS协议传输,但这个302重定向地址可能会被劫持篡改,被改成一个恶意的或者钓鱼HTTPS站点,导致敏感信息如用户名、密码、卡号或敏感文件位置泄露等风险。

Y6.png


修复建议

  通过向 web 应用程序响应添加“Strict-Transport-Security”响应头来实施 HTTP 严格传输安全策略,或实施具有足够长“max-age”的 HTTP Strict-Transport-Security 策略,强制客户端(如浏览器)使用HTTPS与服务器创建连接。


容易出现点击劫持(Clickjacking)

漏洞描述

  页面未能设置适当的X-Frame-Options或Content-Security-Policy HTTP头,则攻击者控制的页面可能将其加载到iframe中,导致点击劫持攻击,此类攻击属于一种视觉欺骗手段,主要实现方式有两种:一是攻击者将一个透明的iframe覆盖在一个网页上,诱使用户在该页面上进行操作,那么用户就在不知情的情况下点击透明的iframe页面;二是攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义。

Y7.png


修复建议

  应用程序应该返回名称为X-Frame-Options、值DENY以完全防止成帧的响应头,或者返回值SAMEORIGIN以允许仅通过与响应本身相同的来源上的页进行成帧,或者通过ALLOW-FROM origin设置白名单来限制允许加载的页面地址。

  1)修改中间件配置:

  a)IIS:

  web.config 配置文件中添加如下响应头:

 <add name="X-Frame-Options" value="SAMEORIGIN"/>

  b)Apache:

  Header always append X-Frame-Options SAMEORIGIN

  c)Nginx:

  add_header X-Frame-Options SAMEORIGIN;

  2)使用meta标签

 <meta http-equiv=”X-Frame-Options” content=”SAMEORIGIN” />


启用了不安全的HTTP方法

漏洞描述

  Web服务器或应用服务器以不安全的方式进行配置,导致启用了WebDAV和不安全的HTTP方法,不安全的HTTP方法一般包括:TRACE、PUT、DELETE、COPY等,可能会造成攻击者在Web服务器上上传、修改或删除Web页面、脚本和文件的隐患。

Y8.png


修复建议

  禁用WebDAV。禁止不需要的HTTP方法(建议只使用GET和POST方法)。

  1)Apache:

  使用Apache的重写规则来禁用Options方法和Trace方法。在Apache配置文件httpd-conf中【vhosts-conf】添加以下代码:


#单独禁用Trace方法:
  RewriteEngine On
  RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
  RewriteRule .* - [F]
  单独禁用Options方法:
  RewriteEngine On
  RewriteCond %{REQUEST_METHOD} ^(OPTIONS)
  RewriteRule .* - [F]
  同时禁用Trace方法和Options方法:
  RewriteEngine On
  RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
  RewriteRule .* - [F]<VirtualHost *:80>
      DocumentRoot "D:\wwwroot"
      ServerName www.abc.com
      ServerAlias abc.com
    <Directory "D:\wwwroot">
        Options FollowSymLinks ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
        RewriteEngine on
        RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
        RewriteRule .* - [F]
    </Directory></VirtualHost>

  2)Nginx:

  在server段里加入下面代码:

 if ($request_method !~* GET|POST) {
              return 403;
          }

  重启Nginx,就可以屏蔽GET、POST之外的HTTP方法。

  3)Tomcat:

  修改web.xml配置文件。

<security-constraint>  
          <web-resource-collection>  
              <url-pattern>/*</url-pattern>  
              <http-method>PUT</http-method>  
              <http-method>DELETE</http-method>  
              <http-method>HEAD</http-method>  
              <http-method>OPTIONS</http-method>  
              <http-method>TRACE</http-method>  
          </web-resource-collection>  
          <auth-constraint>  
          </auth-constraint>  
  </security-constraint>

  4)IIS:

  a)禁用WebDAV功能;

  b)在web.config的【configuration】下添加如下代码:

<system.webServer>    <security>      <requestFiltering>        
  <verbs allowUnlisted="false">          
  <add verb="GET" allowed="true"/>          
  <add verb="POST" allowed="true"/>                 
  </verbs>      
  </requestFiltering>    </security></system.webServer>


"X-Powered-By"字段泄露服务器信息

漏洞描述

  因Web服务器、应用服务器配置不安全,导致响应报文的响应头中"X-Powered-By"字段泄露服务器信息,攻击者可以通过获取服务器版本信息,收集相关漏洞,进行特定的攻击。

Y9.png


修复建议

  隐藏响应头中"X-Powered-By"字段。

  1)IIS:

  修改web.config配置文件。

<configuration>
    <location>
      <system.webServer>
        <httpProtocol>
          <customHeaders>
            <remove name="X-Powered-By" />
          </customHeaders>
        </httpProtocol>     
      </system.webServer>
    </location>
  </configuration>

  2)Nginx:

  需要加上proxy_hide_header。

location / {
      proxy_hide_header   X-Powered-By;
  }

  3)WAS:

  修改websphere相应配置,将com.ibm.ws.webcontainer.disabledxPoweredBy配置更改为true。


"Server"字段泄露服务器信息

漏洞描述

  因Web服务器、应用服务器配置不安全,导致响应报文的响应头中"Server"字段泄露服务器信息,攻击者可以通过获取服务器版本信息,收集相关漏洞,进行特定的攻击。

Y10.png

  

修复建议

  隐藏HTTP响应头中"Server"字段,在web.config添加以下配置:

 <system.webServer>
  <modules>
  <add name="CustomHeaderModule" type="StrongNamespace.HttpModules.CustomHeaderModule" />

  以上就是笔者在实际项目测试过程中经常遇见的十类常见应用配置型漏洞描述及针对常见中间件的修复建议,希望能够帮助开发同事快速理解各类漏洞并找到对应的修复方式!


作者:王菡

来源:51Testing软件测试网


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • Jtest 是 Parasoft 公司推出的一款针对 Java 语言的自动化代码优化和测试工具,它通过实现对 Java 应用程序的静态分析和单元测试,从而提高代码的可靠性以及 Java 软件开发测试团队的工作效率。Jtest安装Jtest目前支持多个IDE,例如Eclipse、IntelliJ、NetBeans,大家可以根据自己的使用需求进行选择。本文将以Eclipse为例,介绍这款优秀的Java代码优化及测试工具。1、将Jtest安装包下载至本地,打开Eclipse,选择Help->Install New Software,如图1所示。2、点击Add->Archive,...
            0 0 2753
            分享
          •  Apifox 自动化测试模块新升级,在流程测试原有功能上新增了测试步骤循环、判断、等待时间的流程控制条件,以及测试步骤分组管理等能力。当业务需要多种判断时,流程控制可用于控制测试步骤的复杂执行顺序,更能模拟用户真实的使用场景,提升测试人员对复杂测试场景的工作效率。循环当测试步骤需要重复执行时,可以通过设置固定数量的有限循环来快速实现。同时支持设置中止条件或遇错处理的逻辑判断,以保证循环能按需运行。注意:右侧运行参数设置模块也有循环功能,但该功能是针对的是整个测试用例。场景实例宠物店需要在当天营业结束后,对今日售出的每个宠物进行信息查询并将「在售」状态变更为「已售出」。假设今日售出 ...
            0 0 966
            分享
          • 针对http接口进行测试,使用Jmeter工具实现。Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此本次直接使用Jmeter工具来完成对Http接口的测试。一、开发接口测试案例的整体方案:第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点;第三步:和开发一起对接口测试案例进行评审;第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件;第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发...
            13 14 2297
            分享
          •   1.技术能力  1.1基础技能   首先,需要具备一定的计算机基础知识,如计算机的基本操作、软件的使用安装等,这是从事软件测试工作的必备的基本技能,在一定程度上也能提升测试工作的实施效率。  案例1:在测试过程中需要编写测试用例、测试报告等文档,需要操作Excel、word、xmind等文本文档,如何调整文档格式、换行、缩进等操作?  案例2:测试过程中会用到各种工具,有些工具是需要安装的,安装过程如何选择下一步,安装完毕之后做哪些配置等?  如何满足基本计算机技能?可以通过下列3个方法:  ·自己查阅资料学习基础技能  ·不断的练习总结  ·多和有计算机技能人沟通交流  1.2...
            11 11 932
            分享
          • java数组Java数组在学习Java过程中属于比较重要的一个章节也是比较难的一个章节,作业带领大家讲解Java数组的一些相关操作。数组的概念 数组就是一组数据,我们定义变量会比较多,如果使用传统的方式,会出现的问题是变量很多,代码也很多,而且使用起来不方便。int t0 = 0 ;int t1 = 1 ;int t2 = 2 ;int t3 = 3 ;int t4 = 4 ;int t5 = 5 ;int t6 = 6 ;int t7...
            2 1 2458
            分享
      • 51testing软件测试圈微信