ESAPI之会话安全
来源:互联网 发布:excel数据如何恢复 编辑:程序博客网 时间:2024/05/18 02:11
ESAPI是开源组织owasp,开放的安全开发框架,但百度、google搜索相关的技术文章很少,今天小尝试了一下,分享一下心得。
会话攻击,简单理解就是盗用窃取用户的cookie,伪装成用户,向服务器端发送请求,窃取用户私密信息。
具体如何防止会话攻击,很简单,参照《Web应用安全威胁与防治--基于OWASP TOP 10 与ESAPI》书中介绍的方法,一旦用户登录成功后,马上validate用户的会话,具体步骤如下:
- 用户输入用户名和密码
- 系统对用户进行验证通过
- 已有的会话信息如果仍然需要,则转移到一个临时变量中去
- invalidate当前会话
- 创建一个新会话
- 把临时变量中保存的会话信息恢复到新创建的会话中去
- 用户使用这个新的会话登录到系统中并进行操作
贴出实例
构造一个简单登录页面
<body> <form action="loginServlet" method="post"> 用户名:<input type="text" name="username" /><br/> 密码:<input type="password" name="password"/><br/> <input type="submit" value="登录"/> </form> </body>
验证成功的页面
<body> 欢迎${sessionScope.username }登录 </body>
然后是一个LoginServlet,其中DefaultHTTPUtilities是ESAPI中org.owasp.esapi.reference.DefaultHTTPUtilities类,该类的changeSessionIdentifier(request),就是实现上述功能。
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");DefaultHTTPUtilities dhUtil = new DefaultHTTPUtilities();try {HttpSession session = dhUtil.changeSessionIdentifier(request);session.setAttribute("username", username);session.setAttribute("password", password);request.getRequestDispatcher("/index.jsp").forward(request, response);} catch (AuthenticationException e) {e.printStackTrace();}}
贴出changeSessionIdentifier(request)方法源码
public HttpSession changeSessionIdentifier(HttpServletRequest request) throws AuthenticationException {// get the current sessionHttpSession oldSession = request.getSession();// make a copy of the session contentMap<String,Object> temp = new ConcurrentHashMap<String,Object>();Enumeration e = oldSession.getAttributeNames();while (e != null && e.hasMoreElements()) {String name = (String) e.nextElement();Object value = oldSession.getAttribute(name);temp.put(name, value);}// kill the old session and create a new oneoldSession.invalidate();HttpSession newSession = request.getSession();User user = ESAPI.authenticator().getCurrentUser();user.addSession( newSession );user.removeSession( oldSession );// copy back the session content for (Map.Entry<String, Object> stringObjectEntry : temp.entrySet()) { newSession.setAttribute(stringObjectEntry.getKey(), stringObjectEntry.getValue());}return newSession;}
这段代码应该很好理解。
- ESAPI之会话安全
- ESAPI之会话安全
- PHP安全编程之会话数据注入
- 安全编程-会话安全
- Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理
- PHP安全编程之session固定获取合法会话
- web应用安全之HTTP与会话管理总结
- 安全测试之会话管理的恶意利用与预防
- 3.4 TCP会话安全
- Web应用安全威胁与防治——基于OWASP Top 10与ESAPI
- Web应用安全威胁与防治:基于OWASP Top 10与ESAPI
- Web应用安全威胁与防治--基于OWASP TOP 10 与ESAPI
- ESAPI WAF
- ESAPI简介
- esapi api
- ESAPI使用方法
- ESAPI简介
- 插件68:保证会话安全
- jQuery验证控件jquery.validate.js使用说明+中文API
- 新的起点,新的开始
- 宏定义
- 链表的操作
- 黑马程序员------集合框架(No.2)(ArrayList、LinkedList、vector)
- ESAPI之会话安全
- HDU4745 Two Rabbits
- toj1868 Count the factors
- 聚类算法(待补充)
- 写在开博前的话
- 安装配置Oracle10g透明网关(Gateway For Sql Server)
- Linux内核进程管理-do_fork()执行过程分析
- 关于文件结束符EOF
- 一个合格的程序员应该读过哪些书