Spring中使用拦截器配置HttpOnly,来提升WEB应用程序的安全性

由于最近公司的项目做了安全评测,里面有一项是关于HttpOnly的.所以了总结一下...  废话不多说,先来说下它是干什么的吧.


       随着B/S的普及,我们平时上网都是依赖于http协议完成,而Http是无状态的,即同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息,http是不会为了下一次连接而维护这次连接所传输的信息的。所以为了在每次会话之间传递信息,就需要用到cookie和session,无论是什么,都是为了让服务器端获得一个token来检查合法性,很多时候都是在cookie中存储一个JsessionID,服务器来识别该用户,那么安全隐患也就引申而出了,只要获得这个cookie,就可以取得别人的身份,特别是管理员等高级权限帐号时,危害就大了,而XSS就是在别人的应用程序中恶意执行一段JS以窃取用户的cookie。



1. 在拦截器中将需要的操作的cookie属性,使用response进行写回.

package com.pzdf.eqihua.sms.interceptor;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;


/**
 * <p>使用拦截器设置cookie的HttpOnly.</p>
 * <p>是为了防止XSS攻击,窃取cookie的内容.</p>
 * @author chenkangjing
 * @time 2017.5.24
 */
public class HttpOnlyInterceptor implements HandlerInterceptor {

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object arg2, Exception Exception)
			throws Exception {
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response,
			Object arg2, ModelAndView arg3) throws Exception {
		Cookie[] cookies = request.getCookies();
		
		if (cookies != null) {
			Cookie cookie = cookies[0];
			if (cookie != null) {
				// serlvet 2.5 不支持在 Cookie 上直接设置 HttpOnly 属性.
				String value = cookie.getValue();
				
				StringBuilder builder = new StringBuilder();
				builder.append("JSESSIONID=" + value + "; ");
				builder.append("Secure; ");
				builder.append("HttpOnly; ");
				
				Calendar calendar = Calendar.getInstance();
				calendar.add(Calendar.HOUR, 1);
				Date date = calendar.getTime();  
			    Locale locale = Locale.CHINA;
			    
			    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss",locale);  
			    builder.append("Expires=" + sdf.format(date));  
			    
                response.setHeader("Set-Cookie", builder.toString());  
			}
		}
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object arg2) throws Exception {
		
		return true;
	}

}

2. 在SpringMvc的配置文件中配置拦截器. 这里配置的是对所有访问.do的控制.
<mvc:interceptors>
	<mvc:interceptor>
		<mvc:mapping path="/**/*.do"/>
		<bean class="com.pzdf.cms.intercepter.HttpOnlyInterceptor"></bean>
	</mvc:interceptor>
</mvc:interceptors>




  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值