技术实在是有限,讲解cookie越权的时候可能有点简单和粗糙。这里就简单记录学习下。

首先自己写一段存在漏洞的代码code:

sendCookie.java

packagecookie;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class SendCookieServlet extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//服务器端生成set-cookie

Cookie cookie = new Cookie("name", "admin");//设置cookie存活时间为十分钟

cookie.setMaxAge(60*10);//设置会话cookie允许的路径//允许整个项目

cookie.setPath("/");//将cookie中存储的信息发送到客户端---头

response.addCookie(cookie);

}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

然后接收cookie中的键值,然后进行判断

GetCookieServlet代码如下:

packagecookie;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class GetCookieServlet extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//获取cookie的键值

Cookie[] cookies =request.getCookies();

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

String name=null;//判斷cookie不能为空

if (cookies != null) {for(Cookie cookie : cookies) {//获取键

cookie.getName();if ("name".equals(cookie.getName())) {

name=cookie.getValue();

}

}

}if(name.equals("admin")) {

response.getWriter().write("欢迎admin登陆后台系统");

}else{

response.getWriter().write("欢迎xxx登陆后台系统");

}

}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

先访问sendCookie然后访问getCookie:

默认是进入admin系统

因为cookie中存储的name=admin,这里修复name=其他值

就越权进入了另一个系统

这里的问题就是没有使用session进行敏感信息的存储。

修复方案:验证session的有效性,session和用户是否匹配,以及用户当前权限

这里我把cookie的存储方式改成seesion的存储方式:

代码如下:

sendCookie:

packagecookie;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;public class SendCookieServlet extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

HttpSession session=request.getSession();

session.setAttribute("name", "admin");

String id=session.getId();//服务器端生成set-cookie

Cookie cookie = new Cookie("JSESSIONID", id);//设置cookie存活时间为十分钟

cookie.setMaxAge(60*10);//设置会话cookie允许的路径//允许整个项目

cookie.setPath("/");//将cookie中存储的信息发送到客户端---头

response.addCookie(cookie);

}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

getCookie代码如下:

packagecookie;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.Cookie;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;public class GetCookieServlet extendsHttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

HttpSession session=request.getSession();

String name= (String) session.getAttribute("name");if(name.equals("admin")) {

response.getWriter().write("欢迎admin登陆后台系统");

}else{

response.getWriter().write("欢迎xxx登陆后台系统");

}

}public void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

doGet(request, response);

}

}

然后访问sendCookie然后再getCookie:

先正常访问:

修改name=其他内容:

已经无法造成cookie的越权。事实证明使用session存储需要进行操作的数据更安全!

进行判断的时候不要直接用cookie存储。使用Session验证。

不忘初心,方得始终。

java越权_从Java的角度简单修复Cookie越权漏洞相关推荐

  1. 易语言 java支持_开源Java客户端可以连接易语言服务器

    我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...

  2. 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...

    最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...

  3. java 模板方法_设计模式(java实现)_模板方法模式(Template method)

    设计模式(java实现)_模板方法模式(Template method) 模板方法模式是编程中经常用到到的模式.它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现.这样,新的子类可以在不改变一个 ...

  4. java安装_使用Java 9模块化来发布零依赖本机应用程序

    java安装 为什么我不能仅构建一个.EXE? 首次引入Java时,主流编程语言大多要么编译成独立的可执行文件(例如C / C ++,COBOL),要么在解释器中运行(例如Perl,Tcl). 对于许 ...

  5. java转账_使用Java模拟银行账户存、取款、转账功能

    半枯 package bank;import java.util.Scanner;/** * 1.建立一个银行账户类(Acount),具有建立新帐号.查询余额.存款.取款.转账 * 即从本账户把钱转给 ...

  6. java预期_预期. java的

    我有这段java代码.我是java中的菜鸟.. 错误: expected cfg = new Config; 码: import java.sql.Connection; import java.sq ...

  7. python能解密java的_实现Java加密,Python解密的RSA非对称加密算法功能

    摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...

  8. java书籍_学习Java最好的10本书,从入门到精通

    在当代,学习Java等编程课程的主要方式是视频资源,如果你想学,在网上五分钟之内就可以找到一堆学习视频,瞬间将你的硬盘填满.但是这些课程质量良莠不齐,对于小白来说很难辨别好坏. 但是书籍不同,书籍都是 ...

  9. java 方块_哈工大java实验 移动小方块

    /*java第二次实验 * 移动小方块 */ import javax.swing.*; import java.awt.event.*; import java.awt.geom.*; import ...

最新文章

  1. discuz中,修改admin密码
  2. ​ RROR 1221 (HY000): Incorrect usage of spatial/fulltext/hash index and explicit index orde ​
  3. web容器启动过程与web.xml
  4. android按钮旋转,单击一个按钮在android中顺时针旋转图像
  5. hbase sqoop 实验_SQOOP安装及使用-实验
  6. 技本功丨甲方大人来了之运维数据分析平台搭建实战
  7. 小程序禁止左右拖动_网课视频快进小技巧
  8. [转]医生和强盗的区别
  9. linux下 环境搭建教程,Linux环境下搭建pNFS使用环境教程
  10. 【Linux】mkdir命令
  11. oracle 19602,Oracle CPU Costing
  12. luogu P4234 最小差值生成树
  13. Docker容器查看ip地址
  14. 将一个长字串分拆为多条记录
  15. 计算机应用技术python_大学计算机应用技术02PythonB2020学习通app网课答案
  16. 前端可以做的SEO搜索引擎优化(摘取)
  17. Java实现内网穿透
  18. FLUENT液滴挥发模拟
  19. air报错 Context3D not available. fd as3项目默认不开启gpu加速的问题
  20. 差示光谱法的测定原理_金属基础知识,钢中碳含量的7种测定方法,你知道吗?...

热门文章

  1. linux验证cuda安装成功_Ubuntu下安装cuda历程记录
  2. Linux之top查看资源、网络操作相关的命令(ping、service)、登录远程服务器、文件互传
  3. 卷积层、池化层等作用
  4. java类型转换——向上转型,向下转型
  5. 初学编程之代码战争过关体验
  6. Windows版Docker(基于WSL2)增加端口映射(需重启Docker)
  7. Activity 的 isFinishing()、isDestroy()
  8. 不再害怕面试问ArrayMap一文完全看懂Android ArrayMap源码解析
  9. IDEA 使用Git Clone项目
  10. NRF52832 + NRF24L01 通讯