java web之xss漏洞修复

java web之xss漏洞修复

一、XSS问题描述

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容

二、XSS 注入方法

在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。
在内联的 JavaScript 中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。
在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签。
在标签的 href、src 等属性中,包含 javascript: 等可执行代码。
在 onload、onerror、onclick 等事件中,注入不受控制代码。
在 style 属性和标签中,包含类似 background-image:url(“javascript:…”); 的代码(新版本浏览器已经可以防范)。
在 style 属性和标签中,包含类似 expression(…) 的 CSS 表达式代码(新版本浏览器已经可以防范)。

三、XSS 防御

3.1 在maven的pom.xml中引入代码

<dependency>
              <groupId>com.navercorp.lucy</groupId>
              <artifactId>lucy-xss-servlet</artifactId>
              <version>2.0.0</version>
</dependency>

或者WEB-INF目录下添加lucy-xss-servlet-2.0.0.jar和lucy-xss-1.6.3.jar,如有需要点击下载链接下载

3.2 在类路径下添加文件 lucy-xss-servlet-filter-rule.xml 。

<?xml version="1.0" encoding="UTF-8"?>
<config  xmlns="http://www.navercorp.com/lucy-xss-servlet">
<defenders>
<!-- XssPreventer 등록 -->
<defender>
<name>xssPreventerDefender</name>
<class>com.navercorp.lucy.security.xss.servletfilter.defender.XssPreventerDefender</class>
</defender>
<!-- XssSaxFilter 등록 -->
<defender>
<name>xssSaxFilterDefender</name>
<class>com.navercorp.lucy.security.xss.servletfilter.defender.XssSaxFilterDefender</class>
<init-param>
<param-value>lucy-xss-sax.xml</param-value> <!--  lucy-xss-filter의 sax용 설정파일 -->
<param-value>false</param-value> <!-- 필터링된 코멘트를  남길지 여부, 성능 효율상 false 추천 -->
</init-param>
</defender>
<!-- XssFilter 등록 -->
<defender>
<name>xssFilterDefender</name>
<class>com.navercorp.lucy.security.xss.servletfilter.defender.XssFilterDefender</class>
<init-param>
<param-value>lucy-xss.xml</param-value> <!--  lucy-xss-filter의 dom용 설정파일 -->
<param-value>false</param-value> <!-- 필터링된 코멘트를  남길지 여부, 성능 효율상 false 추천 -->
</init-param>
</defender>
</defenders>
<!-- default defender 선언, 필터링 시 지정한 defender가  없으면 여기 정의된 default defender를 사용해 필터링 한다.  -->
<default>
<defender>xssPreventerDefender</defender>
</default>
<!-- global 필터링 룰 선언 -->
<global>
<!-- 모든 url에서 들어오는 globalParameter 파라메터는  필터링 되지 않으며
또한 globalPrefixParameter1로 시작하는 파라메터도 필터링  되지 않는다.
globalPrefixParameter2는 필터링 되며  globalPrefixParameter3은 필터링 되지 않지만
더 정확한 표현이 가능하므로 globalPrefixParameter2,  globalPrefixParameter3과 같은 불분명한 표현은 사용하지 않는  것이 좋다. -->
<params>
<param name="globalParameter" useDefender="false" />
<param name="globalPrefixParameter1" usePrefix="true"  useDefender="false" />
<param name="globalPrefixParameter2" usePrefix="true" />
<param name="globalPrefixParameter3" usePrefix="false"  useDefender="false" />
</params>
</global>
<!-- url 별 필터링 룰 선언 -->
<url-rule-set>
<!-- url disable이 true이면 지정한 url 내의 모든 파라메터는  필터링 되지 않는다. -->
<url-rule>
<url disable="true">/disableUrl1.do</url>
</url-rule>
<!-- url disable이 false인 설정은 기본이기 때문에  불필요하다. 아래와 같은 불필요한 설정은 하지 않는다.-->
<url-rule>
<url disable="false">/disableUrl2.do</url>
</url-rule>
<!-- url disable이 true이면 지정한 url 내의 모든 파라메터가  필터링 되지 않기 때문에 <params> 로 선언한 설정은 적용되지  않는다.
아래와 같은 불필요한 설정은 하지 않는다. -->
<url-rule>
<url disable="true">/disableUrl3.do</url>
<params>
<param name="query" useDefender="false" />
<param name="prefix1" usePrefix="true" />
<param name="prefix2" usePrefix="false"  useDefender="false" />
<param name="prefix3" usePrefix="true" useDefender="true"  />
<param name="prefix4" usePrefix="true"  useDefender="false" />
<param name="prefix5" usePrefix="false"  useDefender="true" />
</params>
</url-rule>
<!-- url disable이 false인 설정은 기본이기 때문에  불필요하다. <params> 선언한 설정은 적용이 된다.-->
<url-rule>
<url disable="false">/disableUrl4.do</url>
<params>
<!-- disableUrl4.do 의 query 파라메터와 prefix4로 시작하는  파라메터들은 필터링 되지 않는다.
usePrefix가 false, useDefender가 true인 설정은 기본이기  때문에 불필요하다. -->
<param name="query" useDefender="false" />
<param name="prefix1" usePrefix="true" />
<param name="prefix2" usePrefix="false"  useDefender="false" />
<param name="prefix3" usePrefix="true" useDefender="true"  />
<param name="prefix4" usePrefix="true"  useDefender="false" />
<param name="prefix5" usePrefix="false"  useDefender="true" />
<param name="prefix6" usePrefix="true">
<defender>xssSaxFilterDefender</defender>
</param>
</params>
</url-rule>
<!-- url1 내의 url1Parameter는 필터링 되지 않으며 또한  url1PrefixParameter로 시작하는 파라메터도 필터링 되지  않는다. globalParameter는
상위 글로벌 global 설정에 동일한 이름으로 되어있지만  url-rule 설정을 더 우선하여 따른다. -->
<url-rule>
<url>/url1.do</url>
<params>
<param name="url1Parameter" useDefender="false" />
<param name="url1PrefixParameter" usePrefix="true"  useDefender="false" />
<param name="globalParameter"/>
</params>
</url-rule>
<!-- url2 내의 url2Parameter1만 필터링 되지 않으며  url2Parameter2는 xssSaxFilterDefender를 사용해 필터링 한다. -->
<url-rule>
<url>/url2.do</url>
<params>
<param name="url2Parameter1" useDefender="false">
<defender>xssPreventerDefender</defender>
</param>
<param name="url2Parameter2">
<defender>xssSaxFilterDefender</defender>
</param>
<param name="url2Parameter3">
<defender>xssPreventerDefender</defender>
</param>
</params>
</url-rule>
</url-rule-set>
</config>

4、在web.xml中添加以下代码。

<!-- XSS过滤器 -->
 <filter>
      <filter-name>xssEscapeServletFilter</filter-name>
      <filter-class>com.navercorp.lucy.security.xss.servletfilter.XssEscapeServletFilter</filter-class>
 </filter>
 <filter-mapping>
      <filter-name>xssEscapeServletFilter</filter-name>
      <url-pattern>/*</url-pattern>
 </filter-mapping>

5、重启项目,使用绿盟软件软件扫描,问题解决

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值