xss 攻击防御
2016-06-12 15:53
309 查看
XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。
value1from是来自用户的输入,如果用户不是输入value1from,而是输入
嵌入的JavaScript代码将会被执行
或者用户输入的是
那么就会变成
事件被触发的时候嵌入的JavaScript代码将会被执行
攻击的威力,取决于用户输入了什么样的脚本
当然用户提交的数据还可以通过QueryString(放在URL中)和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); } }
相关文章推荐
- eclipse启动tomcat无法访问的解决方案
- 理解矩阵(一)
- 使用automatorX测试app页面响应时间
- centos安装fabric
- 大话设计模式-第11章 无熟人难办事?--迪米特法则
- 查看HTTP并发连接数
- error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string'
- ImageLoader的使用
- 进程的状态
- 【 Linux 】Linux套接字简要说明
- 缺陷等级划分
- mysql error 1130 hy000:Host 'localhost' is not allowed to connect to this mysql server 解决方案
- XSS和CSRF攻击
- producer数据分发到多个partition
- lsyncd 代替inotify+rsync 配置
- 快排 cmp
- 从join on和where执行顺序认识T-SQL查询处理执行顺序
- ListView的性能优化之convertView和viewHolder
- I/O复用_select_学习
- 树链剖分 模板+HDU 3966 + SPOJ 375 【树剖入门】