您的位置:首页 > 其它

xss 攻击防御

2016-06-12 15:53 309 查看
XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

过程

假如有下面一个textbox

<input type="text" name="address1" value="value1from">


value1from是来自用户的输入,如果用户不是输入value1from,而是输入
"/><script>alert(document.cookie)</script><!-
那么就会变成

<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">


嵌入的JavaScript代码将会被执行

或者用户输入的是

"onfocus="alert(document.cookie)


那么就会变成

<input type="text" name="address1" value="" onfocus="alert(document.cookie)">


事件被触发的时候嵌入的JavaScript代码将会被执行

攻击的威力,取决于用户输入了什么样的脚本

当然用户提交的数据还可以通过QueryString(放在URL中)和Cookie发送给服务器。

Java

package org.digdata.swustoj.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
*
* @author wwhhf
* @since 2016年6月12日
* @comment 进行xss攻击过滤
*/
public class XssFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void destroy() {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
chain.doFilter(new XssHttpServletRequestWrapper(
(HttpServletRequest) request), response);
}

}


package org.digdata.swustoj.filter;

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

import org.apache.commons.lang3.StringEscapeUtils;

/**
*
* @author wwhhf
* @since 2016年6月12日
* @comment 获取request里面的关键信息时进行xss过滤
*
*/
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {

public XssHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
}

@Override
public String getHeader(String name) {
return super.getHeader(name);
}

@Override
public String getQueryString() {
return super.getQueryString();
}

@Override
public String getParameter(String name) {
return StringEscapeUtils.escapeHtml4(super.getParameter(name));
}

@Override
public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name);
if (values != null) {
int length = values.length;
String[] escapseValues = new String[length];
for (int i = 0; i < length; i++) {
escapseValues[i] = StringEscapeUtils.escapeHtml4(values[i]);
}
return escapseValues;
}
return super.getParameterValues(name);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: