java防范跨站腳本攻擊(XSS)


網絡中心提示網站有數目眾多的跨站腳本攻擊(XSS)漏洞,經過查看代碼,認為是JSP中綁定變量是未經處理直接寫入的,而且整個項目中這樣的做法太多,因為是多年前的,不好一個個更改,參照網上資料,通過加filter對數據參數進行處理。

1、在github上下載lucy-xss-servlet-filter:https://github.com/naver/lucy-xss-servlet-filter

2、打開項目lucy-xss-servlet-filter,將下載代碼輸出為jar包.

      項目輸出為jar包參見教程:http://blog.csdn.net/yahohi/article/details/6888559

3、將生成的jar包和lucy-xss-servlet-filter引用的jar包放入漏洞網站的/WEB-INFO/lib目錄或tomcat的lib目錄。

4、在漏洞網站的web.xml中添加對lucy-xss-servlet-filter的引用。

...
    <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、在classess目錄下放入lucy-xss-servlet-filter-rule.xml 。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <config xmlns="http://www.navercorp.com/lucy-xss-servlet">
 3    <defenders>
 4        <!-- XssPreventer 등록 -->
 5        <defender>
 6            <name>xssPreventerDefender</name>
 7            <class>com.navercorp.lucy.security.xss.servletfilter.defender.XssPreventerDefender</class>
 8        </defender>
 9 
10        <!-- XssSaxFilter 등록 -->
11        <defender>
12            <name>xssSaxFilterDefender</name>
13            <class>com.navercorp.lucy.security.xss.servletfilter.defender.XssSaxFilterDefender</class>
14            <init-param>
15                <param-value>lucy-xss-sax.xml</param-value>   <!-- lucy-xss-filter의 sax용 설정파일 -->
16                <param-value>false</param-value>        <!-- 필터링된 코멘트를 남길지 여부, 성능 효율상 false 추천 -->
17            </init-param>
18        </defender>
19 
20        <!-- XssFilter 등록 -->
21        <defender>
22            <name>xssFilterDefender</name>
23            <class>com.navercorp.lucy.security.xss.servletfilter.defender.XssFilterDefender</class>
24            <init-param>
25                <param-value>lucy-xss.xml</param-value>    <!-- lucy-xss-filter의 dom용 설정파일 -->
26                <param-value>false</param-value>         <!-- 필터링된 코멘트를 남길지 여부, 성능 효율상 false 추천 -->
27            </init-param>
28        </defender>
29    </defenders>
30 
31     <!-- default defender 선언, 별다른 defender 선언이 없으면 default defender를 사용해 필터링 한다. -->
32     <default>
33         <defender>xssPreventerDefender</defender>
34     </default>
35 
36     <!-- global 필터링 룰 선언 -->
37     <global>
38         <!-- 모든 url에서 들어오는 globalParameter 파라메터는 필터링 되지 않으며 
39                 또한 globalPrefixParameter로 시작하는 파라메터도 필터링 되지 않는다. -->
40         <params>
41             <param name="globalParameter" useDefender="false" />
42             <param name="globalPrefixParameter" usePrefix="true" useDefender="false" />
43         </params>
44     </global>
45 
46     <!-- url 별 필터링 룰 선언 -->
47     <url-rule-set>
48        
49        <!-- url disable이 true이면 지정한 url 내의 모든 파라메터는 필터링 되지 않는다. -->
50        <url-rule>
51            <url disable="true">/disableUrl1.do</url>
52        </url-rule>
53        
54         <!-- url1 내의 url1Parameter는 필터링 되지 않으며 또한 url1PrefixParameter로 시작하는 파라메터도 필터링 되지 않는다. -->
55         <url-rule>
56             <url>/url1.do</url>
57             <params>
58                 <param name="url1Parameter" useDefender="false" />
59                 <param name="url1PrefixParameter" usePrefix="true" useDefender="false" />
60             </params>
61         </url-rule>
62         
63         <!-- url2 내의 url2Parameter1만 필터링 되지 않으며 url2Parameter2는 xssSaxFilterDefender를 사용해 필터링 한다.  -->
64         <url-rule>
65             <url>/url2.do</url>
66             <params>
67                 <param name="url2Parameter1" useDefender="false" />
68                 <param name="url2Parameter2">
69                     <defender>xssSaxFilterDefender</defender>
70                 </param>
71             </params>
72         </url-rule>
73     </url-rule-set>
74 </config>

 

6、重啟tomcat測試網站,在參數中注入腳本不再提示XSS警告,而是直接出錯。

問題解決。這樣的好處是不用改動原網站。

 

參考:

WEB安全實戰(五)XSS 攻擊的另外一種解決方案(推薦) - CSDN博客

java(ssh)項目防止XSS攻擊方法總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM