您的位置:首页 > 理论基础 > 计算机网络

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

2017-05-24 23:02 465 查看
由于最近公司的项目做了安全评测,里面有一项是关于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);
9375
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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: