防止xss攻擊的有效方法

最近,有個(gè)項(xiàng)目突然接到總部的安全漏洞報(bào)告,查看后知道是XSS攻擊。
問題描述:
在頁面上有個(gè)隱藏域:
- <input type = "hidden" id = "action" value = "${action}"/>
當(dāng)前頁面提交到Controller時(shí),未對(duì)action屬性做任何處理,直接又回傳到頁面上
如果此時(shí)action被用戶惡意修改為:***"<script>alert(1);</script>"***
此時(shí)當(dāng)頁面刷新時(shí)將執(zhí)行alert(1),雖然錯(cuò)誤不嚴(yán)重,但是任何安全隱患都應(yīng)受到重視。
解決思路:
該問題是由于對(duì)用戶輸入數(shù)據(jù)(隱藏域)未做任何處理,導(dǎo)致非法數(shù)據(jù)被執(zhí)行,那么解決該問題的核心思路就是對(duì)用戶數(shù)據(jù)做嚴(yán)格處理,對(duì)任何頁面?zhèn)鬟f的數(shù)據(jù)都不應(yīng)過分信任,處理方法如下:
1.在頁面上對(duì)action參數(shù)做轉(zhuǎn)義處理,${action?html}(前端技術(shù)采用freemarker),但是此種方法只能對(duì)單個(gè)屬性有效,如果此時(shí)項(xiàng)目處于維護(hù)期且有大量此種問題,修復(fù)的難度較大且不便于統(tǒng)一維護(hù)
2.在服務(wù)端對(duì)用戶數(shù)據(jù)做轉(zhuǎn)義處理,此時(shí)需要?jiǎng)?chuàng)建一個(gè)filter,對(duì)request進(jìn)行二次封裝,核心代碼如下:
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletRequestWrapper;
- import org.apache.commons.lang3.StringEscapeUtils;
- public class XssRequestWrapper extends HttpServletRequestWrapper {
- public XssRequestWrapper(HttpServletRequest request) {
- super(request);
- }
- public String getParameter(String name) {
- String value = super.getParameter(name);
- if (value == null) {
- return null;
- }
- return StringEscapeUtils.escapeHtml4(value);
- }
- public String[] getParameterValues(String name) {
- String[] values = super.getParameterValues(name);
- if (values == null) {
- return null;
- }
- String[] newValues = new String[values.length];
- for (int i = 0; i < values.length; i++) {
- newValues[i] = StringEscapeUtils.escapeHtml4(values[i]);
- }
- return newValues;
- }
- }
XssRequestWrapper是對(duì)request進(jìn)行的二次封裝,最核心的作用是對(duì)request中的參數(shù)進(jìn)行轉(zhuǎn)義處理(需要用到commons-lang3.jar)
定義filter,核心的代碼如下:
- @Override
- public void doFilter(ServletRequest request,
- ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest req = (HttpServletRequest) request;
- chain.doFilter(new <span style="color: #000000;">XssRequestWrapper</span>(req), response);
- }
在web.xml中配置指定請(qǐng)求進(jìn)行過濾,可以有效防止xss攻擊,希望本文所述對(duì)大家熟練掌握防止xss攻擊的方法有所幫助。
相關(guān)文章
- 貌似關(guān)于xss的資料t00ls比較少,看見好東西Copy過來,不知道有木有童鞋需要Mark的2012-10-16
網(wǎng)站受到XSS跨站點(diǎn)腳本攻擊的分析及解決方法
本文詳細(xì)講了如何避免XSS跨站點(diǎn)腳本攻擊2012-06-07- XSS 攻擊常用腳本,大家可以了解xss攻擊的一些知識(shí)做好網(wǎng)站安全防范。2020-04-13
- 1 背景知識(shí) 1.1 什么是XSS攻擊 XSS攻擊:跨站腳本攻擊(Cross Site Scripting),為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。故將跨站腳本攻擊2008-10-08
- XSS漏洞一般是基于WEB程序的輸入輸出問題,但最近80SEC開始發(fā)現(xiàn)了一系列以IE為內(nèi)核的第三方瀏覽器的漏洞,在評(píng)估其中的XSS漏洞,我們發(fā)現(xiàn)了基于瀏覽器軟件自身設(shè)計(jì)造成的XS2008-10-08
- 最近跨站腳本漏洞好像比較火,國內(nèi)的一些比較出名的WEB程序都陸續(xù)暴出了跨站腳本漏洞,但是一提到跨站腳本漏洞的攻擊方式大家都啞火了,因?yàn)樵诔R?guī)的概念中這種漏洞最多是2008-10-08
- 動(dòng)易2005里面,留言的時(shí)候存在一個(gè)XSS。 攻擊方法如下 : 首先在網(wǎng)站注冊(cè)一個(gè)普通會(huì)員,然后去GUESTBOOK留言,在插入圖片的時(shí)候地址寫上(建議在原代碼里面把圖片的高度2008-10-08
Cross Iframe Trick:the Old New Thing(圖)
我思考了很久才把這里面的錯(cuò)綜復(fù)雜的關(guān)系整清楚,我想很多人看我下面的paper會(huì)睡著,或者干脆“一目百行”的跳過去,但如果你真的想弄懂,請(qǐng)調(diào)試我的 每一個(gè)poc,會(huì)非常有2008-10-08Session Fixation 攻防實(shí)戰(zhàn)(圖)
最近筆者在網(wǎng)上看到一個(gè)新文章《JSESSIONID Regeneration in Struts 2》,講的是一段代碼,在STRUTS 2框架中,防御Session Fixation攻擊。筆者比較老土,看不懂英文,還好2008-10-08