一般我们在实际项目当中经常出现黑客,在js方式获取我们在浏览器当中存储的cookie资料,绕开登录并登录主机进行资料的访问;一帮有以下两种方式,防止此类事情发生:
1.在登录后重置sessionID
在登录验证成功后,通过重置session,是之前的匿名sessionId失效,这样可以避免使用伪造的sessionId进行攻击。代码如下
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username=request.getParameter("username");
String password=request.getParameter("password");
if("admin".equals(username) && "pass".equals(password)){
//是之前的匿名session失效
request.getSession().invalidate();
request.getSession().setAttribute("login", true);
response.sendRedirect("hello.jsp");
}else{
response.sendRedirect("login.jsp");
}
}
2.设置httpOnly属性
httponly是微软对cookie做的扩展,该值指定 Cookie 是否可通过客户端脚本访问, 解决用户的cookie可能被盗用的问题,减少跨站脚本攻击
主流的大多数浏览器已经支持此属性。httpOnly是cookie的扩展属性,并不包含在servlet2.x的规范里,因此一些javaee应用服务器并不支持httpOnly,针对tomcat,>6.0.19或者>5.5.28的版本才支持httpOnly属性,具体方法是在conf/context.xml添加httpOnly属性设置
<Context useHttpOnly="true">
...
</Context>
另一种设置httpOnly的方式是使用Tomcat的servlet扩展直接写header
response.setHeader( "Set-Cookie", "name=value; HttpOnly");