java越权_从Java的角度简单修复Cookie越权漏洞
技术实在是有限,讲解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越权漏洞相关推荐
- 易语言 java支持_开源Java客户端可以连接易语言服务器
我们的服务端处理客户端的连接请求是同步进行的, 每次接收到来自客户端的连接请求后, 都要先跟当前的客户端通信完之后才能再处理下一个连接请求. 这在并发比较多的情况下会严重影响程序的性能, 为此,我们可 ...
- 尚学堂java培训_送给 Java 自学者或者初学者的最全知识清单,2020 年 Java 就该这么学...
最近逛知乎,发现有很多想自学 Java 或者 Java 初学者提问,不知道如何学习 Java?我接触 Java 快 8 年的时间了,一直从事 Java 开发工作,自己一直升级打怪,对于如何更好的学习 ...
- java 模板方法_设计模式(java实现)_模板方法模式(Template method)
设计模式(java实现)_模板方法模式(Template method) 模板方法模式是编程中经常用到到的模式.它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现.这样,新的子类可以在不改变一个 ...
- java安装_使用Java 9模块化来发布零依赖本机应用程序
java安装 为什么我不能仅构建一个.EXE? 首次引入Java时,主流编程语言大多要么编译成独立的可执行文件(例如C / C ++,COBOL),要么在解释器中运行(例如Perl,Tcl). 对于许 ...
- java转账_使用Java模拟银行账户存、取款、转账功能
半枯 package bank;import java.util.Scanner;/** * 1.建立一个银行账户类(Acount),具有建立新帐号.查询余额.存款.取款.转账 * 即从本账户把钱转给 ...
- java预期_预期. java的
我有这段java代码.我是java中的菜鸟.. 错误: expected cfg = new Config; 码: import java.sql.Connection; import java.sq ...
- python能解密java的_实现Java加密,Python解密的RSA非对称加密算法功能
摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...
- java书籍_学习Java最好的10本书,从入门到精通
在当代,学习Java等编程课程的主要方式是视频资源,如果你想学,在网上五分钟之内就可以找到一堆学习视频,瞬间将你的硬盘填满.但是这些课程质量良莠不齐,对于小白来说很难辨别好坏. 但是书籍不同,书籍都是 ...
- java 方块_哈工大java实验 移动小方块
/*java第二次实验 * 移动小方块 */ import javax.swing.*; import java.awt.event.*; import java.awt.geom.*; import ...
最新文章
- discuz中,修改admin密码
- ​ RROR 1221 (HY000): Incorrect usage of spatial/fulltext/hash index and explicit index orde ​
- web容器启动过程与web.xml
- android按钮旋转,单击一个按钮在android中顺时针旋转图像
- hbase sqoop 实验_SQOOP安装及使用-实验
- 技本功丨甲方大人来了之运维数据分析平台搭建实战
- 小程序禁止左右拖动_网课视频快进小技巧
- [转]医生和强盗的区别
- linux下 环境搭建教程,Linux环境下搭建pNFS使用环境教程
- 【Linux】mkdir命令
- oracle 19602,Oracle CPU Costing
- luogu P4234 最小差值生成树
- Docker容器查看ip地址
- 将一个长字串分拆为多条记录
- 计算机应用技术python_大学计算机应用技术02PythonB2020学习通app网课答案
- 前端可以做的SEO搜索引擎优化(摘取)
- Java实现内网穿透
- FLUENT液滴挥发模拟
- air报错 Context3D not available. fd as3项目默认不开启gpu加速的问题
- 差示光谱法的测定原理_金属基础知识,钢中碳含量的7种测定方法,你知道吗?...
热门文章
- linux验证cuda安装成功_Ubuntu下安装cuda历程记录
- Linux之top查看资源、网络操作相关的命令(ping、service)、登录远程服务器、文件互传
- 卷积层、池化层等作用
- java类型转换——向上转型,向下转型
- 初学编程之代码战争过关体验
- Windows版Docker(基于WSL2)增加端口映射(需重启Docker)
- Activity 的 isFinishing()、isDestroy()
- 不再害怕面试问ArrayMap一文完全看懂Android ArrayMap源码解析
- IDEA 使用Git Clone项目
- NRF52832 + NRF24L01 通讯