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

来源:互联网 发布:淘宝店铺怎么做广告 编辑:程序博客网 时间:2024/05/22 00:32

由于最近公司的项目做了安全评测,里面有一项是关于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 {@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object arg2, Exception Exception)throws Exception {}@Overridepublic 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());  }}}@Overridepublic 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>




原创粉丝点击