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

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

问题

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

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

思路

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

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

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

解决

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

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


相关文章
|
5月前
|
Java
Java语言实现字母大小写转换的方法
Java提供了多种灵活的方法来处理字符串中的字母大小写转换。根据具体需求,可以选择适合的方法来实现。在大多数情况下,使用 String类或 Character类的方法已经足够。但是,在需要更复杂的逻辑或处理非常规字符集时,可以通过字符流或手动遍历字符串来实现更精细的控制。
393 18
|
5月前
|
Java 编译器 Go
【Java】(5)方法的概念、方法的调用、方法重载、构造方法的创建
Java方法是语句的集合,它们在一起执行一个功能。方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在程序中被创建,在其他地方被引用方法的优点使程序变得更简短而清晰。有利于程序维护。可以提高程序开发的效率。提高了代码的重用性。方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。这种就属于驼峰写法下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。
276 4
|
5月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
371 5
|
6月前
|
算法 安全 Java
除了类,Java中的接口和方法也可以使用泛型吗?
除了类,Java中的接口和方法也可以使用泛型吗?
213 11
|
9月前
|
算法 Java 测试技术
Java 从入门到实战完整学习路径与项目实战指南
本文详细介绍了“Java从入门到实战”的学习路径与应用实例,涵盖基础、进阶、框架工具及项目实战四个阶段。内容包括环境搭建、语法基础、面向对象编程,数据结构与算法、多线程并发、JVM原理,以及Spring框架等核心技术。通过学生管理系统、文件下载器和博客系统等实例,帮助读者将理论应用于实践。最后,提供全链路电商系统的开发方案,涉及前后端技术栈与分布式架构。附代码资源链接,助力成为合格的Java开发者。
365 4
|
设计模式 算法 Oracle
Java语言学习路径及学习资源推荐
Java语言学习路径及学习资源推荐
|
设计模式 前端开发 安全
Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
【4月更文挑战第9天】Java是一种广泛使用的编程语言,其学习路径可以大致分为以下几个阶段
196 1
|
消息中间件 前端开发 Java
java学习路径
【4月更文挑战第9天】java学习路径
271 1
|
设计模式 算法 Java
【Java设计模式 学习目标及大纲】高质量代码的标准及实现路径
【Java设计模式 学习目标及大纲】高质量代码的标准及实现路径
335 0
|
Java
Java - 学习路径
Java - 学习路径
1740 0
Java - 学习路径