防止xss攻击的有效方法
最近,有个项目突然接到总部的安全漏洞报告,查看后知道是XSS攻击。
问题描述:
在页面上有个隐藏域:
- <input type = "hidden" id = "action" value = "${action}"/>
当前页面提交到Controller时,未对action属性做任何处理,直接又回传到页面上
如果此时action被用户恶意修改为:***"<script>alert(1);</script>"***
此时当页面刷新时将执行alert(1),虽然错误不严重,但是任何安全隐患都应受到重视。
解决思路:
该问题是由于对用户输入数据(隐藏域)未做任何处理,导致非法数据被执行,那么解决该问题的核心思路就是对用户数据做严格处理,对任何页面传递的数据都不应过分信任,处理方法如下:
1.在页面上对action参数做转义处理,${action?html}(前端技术采用freemarker),但是此种方法只能对单个属性有效,如果此时项目处于维护期且有大量此种问题,修复的难度较大且不便于统一维护
2.在服务端对用户数据做转义处理,此时需要创建一个filter,对request进行二次封装,核心代码如下:
- 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是对request进行的二次封装,最核心的作用是对request中的参数进行转义处理(需要用到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中配置指定请求进行过滤,可以有效防止xss攻击,希望本文所述对大家熟练掌握防止xss攻击的方法有所帮助。
相关文章
- 貌似关于xss的资料t00ls比较少,看见好东西Copy过来,不知道有木有童鞋需要Mark的2012-10-16
- 本文详细讲了如何避免XSS跨站点脚本攻击2012-06-07
- XSS 攻击常用脚本,大家可以了解xss攻击的一些知识做好网站安全防范。2020-04-13
- 1 背景知识 1.1 什么是XSS攻击 XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击2008-10-08
- XSS漏洞一般是基于WEB程序的输入输出问题,但最近80SEC开始发现了一系列以IE为内核的第三方浏览器的漏洞,在评估其中的XSS漏洞,我们发现了基于浏览器软件自身设计造成的XS2008-10-08
- 最近跨站脚本漏洞好像比较火,国内的一些比较出名的WEB程序都陆续暴出了跨站脚本漏洞,但是一提到跨站脚本漏洞的攻击方式大家都哑火了,因为在常规的概念中这种漏洞最多是2008-10-08
- 动易2005里面,留言的时候存在一个XSS。 攻击方法如下 : 首先在网站注册一个普通会员,然后去GUESTBOOK留言,在插入图片的时候地址写上(建议在原代码里面把图片的高度2008-10-08
Cross Iframe Trick:the Old New Thing(图)
我思考了很久才把这里面的错综复杂的关系整清楚,我想很多人看我下面的paper会睡着,或者干脆“一目百行”的跳过去,但如果你真的想弄懂,请调试我的 每一个poc,会非常有2008-10-08- 最近笔者在网上看到一个新文章《JSESSIONID Regeneration in Struts 2》,讲的是一段代码,在STRUTS 2框架中,防御Session Fixation攻击。笔者比较老土,看不懂英文,还好2008-10-08


最新评论