【Java项目】解决请求路径上明文ID传输导致可能被攻击的方法

简介: 【Java项目】解决请求路径上明文ID传输导致可能被攻击的方法

问题

这个问题是我公司的一个小业务问题,问题来源于我们发送请求的时候,请求路径上携带的是明文,比如http://xxx/xxx/id=12345,那么别有用心的人就可能会推测出id的生成策略,导致遍历id,自增id的方式来获取我们服务的数据,这是很危险的,所以我的mentor就叫我想一个解决方法。

比如如下的方式就有可能推测出id的生成策略,导致被攻击,我们需要解决的就是这种问题

思路

在解决问题之前,需要先考虑几个因素,先列出我们可能想到的解决方式以及这种方式的问题:

首先就是对id进行加密解密,也就是我们在前端和后端代码处都保存一份密钥,然后使用这一份密钥对id进行加解密,我们后端查出数据进行密钥加密之后再把数据(加密后的数据)返回给前端,然后前端再次使用密钥去解密这个密文。看上去好像可以,不是明文传输了,比如返回的路径可能如下:

但是这样子做仍然有问题,这个问题就在于,前端的代码是共享的可见的,也就是我们的密钥以及解密方法都是直接存储在浏览器并且可以使用F12去查看和修改的,那么得到了密钥之后进行解密然后再递推出ID依旧是可行的,所以这种方式不可以,这也是最开始我想到的方法。

解决

上面说到了,这种解决方式的问题就在于,你的密钥是存储再前端的,那么如果我们有一种办法可以让前端不存储密钥,但是也可以加密解密,那么就能解决这个问题了。

我的思路是,我们的后端代码从数据库取出ID之后,使用后端代码存储的密钥进行加密,后端代码不开源,所以其他人是拿不到密钥的,那么加密方式只有我们开发者才能知道,然后我们将明文ID和加密好的密文一起传输给前端,前端使用明文进行展示,虽然HTTP请求中依旧可以看到明文和密文,但是如果不法分子想要发送一个对应的请求,他同时也需要同时传输一个明文和密文,由于他不知道密钥,也就无法对明文加密得到密文,它传输过来的密文即使存在,是正确的,但是由于密文是错误的,所以它的查询是失败的,他依旧是不知道我们具体的数据,也就一定程度上保证的数据的安全。


相关文章
|
13天前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
2月前
|
算法 Java 开发者
Java 项目实战数字华容道与石头迷阵游戏开发详解及实战方法
本文介绍了使用Java实现数字华容道和石头迷阵游戏的技术方案与应用实例,涵盖GUI界面设计、二维数组操作、游戏逻辑控制及自动解法算法(如A*),适合Java开发者学习游戏开发技巧。
200 46
|
2月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
202 0
|
2月前
|
存储 Java 数据处理
Java映射操作:深入Map.getOrDefault与MapUtils方法
结合 `getOrDefault`方法的简洁性及 `MapUtils`的丰富功能,Java的映射操作变得既灵活又高效。合理地使用这些工具能够显著提高数据处理的速度和质量。开发人员可以根据具体的应用场景选择适宜的方法,以求在性能和可读性之间找到最佳平衡。
103 0
|
2月前
|
缓存 人工智能 NoSQL
Java中实现Token设置过期时间的方法
本文介绍了在Java应用中实现Token设置过期时间的多种方法,包括使用JWT和Redis缓存,并结合定时任务清理过期Token,以提升系统安全性与用户隐私保护。
272 0
|
Java
JAVA方法的定义
JAVA方法的定义
189 0
|
7月前
|
存储 JSON Java
《从头开始学java,一天一个知识点》之:方法定义与参数传递机制
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 🚀 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。上篇:《输入与输出:Scanner与System类》 | 下篇剧透:《方法重载与可变参数》。
143 25
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
117 1
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
178 1
|
存储 Java
Java中带返回值方法的定义与调用技术
Java中带返回值方法的定义与调用技术
233 1

热门文章

最新文章