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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 【Java项目】解决请求路径上明文ID传输导致可能被攻击的方法

问题

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

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

思路

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

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

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

解决

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

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


相关文章
|
25天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
11天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
73 34
|
23天前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
37 4
|
23天前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
24 4
|
21天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
24 1
|
Java
JAVA方法的定义
JAVA方法的定义
95 0
|
6月前
|
安全 Java 编译器
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
杭州 【Java基础知识 11】java泛型方法的定义和使用(学习+改进+自己理解,想法) (借鉴-侵-删)
43 1
|
7月前
|
存储 Java
Java数组与带参数方法:定义、调用及实践
Java数组与带参数方法:定义、调用及实践
79 1
|
7月前
|
存储 Java
Java中带返回值方法的定义与调用技术
Java中带返回值方法的定义与调用技术
106 1
|
7月前
|
Java
Java一分钟之-方法定义与调用基础
【5月更文挑战第8天】本文介绍了Java编程中的方法定义和调用,包括基本结构、常见问题和避免策略。方法定义涉及返回类型、参数列表和方法体,易错点有返回类型不匹配、参数错误和忘记返回值。在方法调用时,要注意参数传递、静态与非静态方法的区分,以及重载方法的调用。避免错误的策略包括明确返回类型、参数校验、理解值传递、区分静态和非静态方法以及合理利用重载。通过学习和实践,可以提升编写清晰、可维护代码的能力。
231 0