当前位置: 首页 > 知识库问答 >
问题:

java - 自增主键不会暴露数据吗?

太叔何平
2023-05-12

假如有一个get请求的接口,传的参数是id = 1这样子的,那么不是可以被用户拿到所有的数据了吗


for (let index = 0; index < 1000000; index++) {
  get(index).then(res => {
    if (res != null) {
      console.log(res)
    } else {
      // 该id的数据为空
    }
  })
}

像这种情况怎么处理呀

如果这个情况的话,被别人调用了删除的接口不是很恐怖吗,因为删除接口也是传一个id过去后端就删除了

共有9个答案

阎麒
2023-05-12

就是为了防止你说的这种随便传一个id就可以做到数据的删除,才会有各种校验,鉴权,等等一系列操作。

漆雕彬彬
2023-05-12

正常来说,自增id最多只能暴漏用户(或者某个事物的数量)的数量级(大约多少)。

后端在做好权限控制的情况下,不符合条件的用户无法通过自增id来获取更多信息或者进行操作。

曾嘉祯
2023-05-12

我1年前去老家一个医院做核酸,做核酸前要输入个人信息
过一天,核酸结果出来了,我输入自己的手机号,短信验证码后,跳到了一个h5页面核酸报告页面
好奇之下我把这个h5链接复制出来
发现链接:https://xxxxxxx/xxx/xxx/20220...
我尝试输入 https://xxxxxxx/xxx/xxx/20220...,显示另一个人的核酸报告(姓名,性别,身份证,家庭住址,手机号,核酸阴性)
这时候我大概明白了 20220201是日期,2852代表这一天你是第几个做核酸的
我大概算了一下,我可以通过这个链接获取最少30万人的个人信息(每天做核酸3000人,就按照半年来算就45万人,实际上可以查到一年前的数据,实际上试验下每天最多的时候有5千人)
我给医院打了电话,说你们的核酸报告存在严重的信息安全问题,接电话的是一个前台说会向上汇报
过了3个月又看了一下发现还存在
过去半年再看发现链接不可访问

只要做好a的数据只有a能查看修改,那么自增id只能确定用户的数量级

高宸
2023-05-12

你这个问题。就是最常见的 水平越权问题
数据的增删改查权限要控制好。
比如有些数据是需要登陆状态的,那么你请求接口还得带上token。token里面对应的数据得和对应的ID有关联关系。

丌官飞章
2023-05-12

首先要知道你想干嘛?说说你的需求,权限控制分很多种

我看你是java,可看看这个
https://spring.io/projects/spring-security

后台控制权限,基本就是控制一个请求链接的权限,一般是
用户表 , 角色表 , 权限表 , 用户关联角色表 , 角色关联权限表
请求这个链接前,查下数据看看有么有这个权限就可以了

郝修为
2023-05-12

自增id我认为最大的麻烦,是给爬虫提供了更方便的方式。。。毕竟可以可以直接从1爬到头。。。
所以即使是开放的数据,我也觉得加上接口的token验证和使用uuid比较好。
至于删除的部分,正常都会有删除方面的控制逻辑,但是如果是一个人,获取了admin权限,那么的确自增id会更加方便的让他快速删除。

姬念
2023-05-12

他能知道前后的id,但他没权限删除啊!

你执行删除操作的时候,肯定得判断下这个用户的权限,至少这个id是属于他本人的,或者有更高权限的管理员,才能进行删除。

黄弘盛
2023-05-12

最简单的理解方式:
本来有100条数据就是给你看的,你通过id=n可以查看,但是你想删除,就需要你能够登录了,并且确定你有权限才可以。

其实只要改后面的数字就能看到其他问答,这种数据就是给你看的,即使你能找到规律也没关系,但是你能删除其人的问答吗?

柳翼
2023-05-12

1 如果数据是公开查看的

那么本来用户就能看到所有这些数据

2 如果数据是非公开的

那么肯定有权限控制用户可以看哪些数据,不能看的知道ID也看不了

自增ID带来的实际问题是:

即便不能看到数据,但是能推测你的业务相关的数据量多少。
 类似资料:
  • 8.2. 会话数据暴露 当你关注于防止源码的暴露时,你的会话数据只同样存在着风险。在默认情况下,SESSION保存在/tmp目录下。这样做在很多情形下是很方便的,其中之一是所有用户都有对/tmp的写入权限,这样Apache同样也有权限进行写入。虽然其他用户不能直接从shell环境读取这些会话文件,但他们可以写一个简单的脚本来进行读取: <?php header('Content-Type: tex

  • 4.2. 会话数据暴露 会话数据常会包含一些个人信息和其它敏感数据。基于这个原因,会话数据的暴露是被普遍关心的问题。一般来说,暴露的范围不会很大,因为会话数据是保存在服务器环境中的,而不是在数据库或文件系统中。因此,会话数据自然不会公开暴露。 使用SSL是一种特别有效的手段,它可以使数据在服务器和客户端之间传送时暴露的可能性降到最低。这对于传送敏感数据的应用来说非常重要。SSL在HTTP之上提供了

  • 随着在线应用程序日复一日地涌入互联网,并非所有应用程序都受到保护。许多Web应用程序无法正确保护敏感用户数据,如信用卡信息/银行帐户信息/身份验证凭据。黑客可能最终窃取这些受到弱保护的数据,以进行信用卡欺诈,身份盗窃或其他犯罪。 下面我们来了解这个漏洞的威胁代理,攻击向量,安全弱点,技术影响和业务影响。 威胁代理 - 谁可以访问您的敏感数据和任何数据备份。有外部和内部威胁。 攻击者的方法 - 做中

  • 3.3. 数据的暴露 关于数据库,另外需要关心的一点是敏感数据的暴露。不管你是否保存了信用卡号,社会保险号,或其它数据,你还是希望确认数据库是安全的。 虽然数据库安全已经超出了本书所讨论的范围(也不是PHP开发者要负责的),但是你可以加密最敏感的数据,这样只要密钥不泄露,数据库的安全问题就不会造成灾难性的后果。(关于加密的详细介绍参见本书附录C) 要看图的话,请至技术文档区下载原版chm http

  • 问题内容: 我想在ala SQL Server列中实现标识或自动递增值: 如何才能做到这一点? 问题答案: 正如Orbman所说,实现此目标的标准方法是使用序列。大多数人也将其与插入触发器结合在一起。因此,当插入没有ID的行时,触发器将触发以从序列中为您填写ID。 这是在Oracle中使用触发器的少数情况之一。

  • 主要内容:指定自增字段初始值,自增字段值不连续在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。 通过给字段添加 AUTO_INCREMENT 属性来实现主键自增长。语法格式如下: 字段名 数据类型 AUTO_INCREMENT 默认情况下,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。 一个表中只能