社区
Web 开发
帖子详情
/getUserById/{userId}这样的请求毫无安全性可言,怎么解决问题呢
亲爱的Joe
2018-04-04 03:34:52
/getUserById/{userId}
上面那个url可以通过userId获取到User的信息。
我们假设只有user所在公司才能拿到该User的信息。那么问题来了。假如其他单位的管理员登录后把上面的userId改成了别的攻速的User的userId,那他不就拿到别别人公司user的信息了么?
这样的问题要怎么解决啊?
再升级下问题。比如只有单位和本人才应该拿到自己的信息呢?
...全文
1446
12
打赏
收藏
/getUserById/{userId}这样的请求毫无安全性可言,怎么解决问题呢
/getUserById/{userId} 上面那个url可以通过userId获取到User的信息。 我们假设只有user所在公司才能拿到该User的信息。那么问题来了。假如其他单位的管理员登录后把上面的userId改成了别的攻速的User的userId,那他不就拿到别别人公司user的信息了么? 这样的问题要怎么解决啊? 再升级下问题。比如只有单位和本人才应该拿到自己的信息呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
白_开_心
2020-02-29
打赏
举报
回复
那是不是还有垂直权限漏洞
Zoey_C
2018-04-10
打赏
举报
回复
没有权限控制嘛?请求路径不能隐藏嘛。
亲爱的Joe
2018-04-10
打赏
举报
回复
谢谢大家的回答了。 我解决了,虽然不够完美,也可能没有充分的使用shiro框架的功能,不过,大体上是解决了。 我使用了shiro中的session来保存了一些登录用户的数据,然后在某些地方做了一些判断,比如根据用户id获取用户数据的时候,我要判断下这个用户的id是不是当前登录用户的id。 或者单位级别用户根据用户id获取用户信息的时候,我还要求请求信息的单位账号提供自己的单位id,我自己主动判断是否是所请求用户的单位。 另外,我知道了这种问题的专业术语:水平权限漏洞。 大家想学习的可以去自己搜搜看看。
我纯洁全身都纯洁
2018-04-10
打赏
举报
回复
给登录者加这个接口的权限。过滤器判断下即可
yjsl__
2018-04-09
打赏
举报
回复
员工应该是有个部门外键,删除前,先根据员工的部门外键找到对应的经理,判断该经理的id和当前登录用户是否一样
maradona1984
2018-04-09
打赏
举报
回复
难道你们没有权限控制? 加个数据权限控制就可以了
Braska
2018-04-09
打赏
举报
回复
这跟url写法没关系吧 就算userId不写在url里 也可以从request里面拿到userId 归根结底就是权限控制的问题
亲爱的Joe
2018-04-09
打赏
举报
回复
引用 4 楼 yjsl__ 的回复:
两家公司能共用一张user表也是第一次听说
不要太较真,那就不说两家公司,说一家公司好了。 公司的a部门职工信息职能由a部门的经理看,假如b部门经理登录后换了个a部门员工的id就去删除了,你说这样的需求还不多么?
yjsl__
2018-04-05
打赏
举报
回复
两家公司能共用一张user表也是第一次听说
这里有bug
2018-04-04
打赏
举报
回复
所有这种接口的,可在访问的接口上面加一个拦截器,拦截器的内容就是判断是否单位和本人
落落叶叶无声
2018-04-04
打赏
举报
回复
访问/getUserById/{userId}页面时将userId所属单位和当前管理员的单位对比下,不同就提示不存在,相同就给过。
qq_41228556
2018-04-04
打赏
举报
回复
你可以判断一下,他要获取用户信息的公司与他所在公司是否一致不就行了
基于Go语言大型企业级电商秒杀系统实战教程
课程背景:如果赶上一个语言火的时候,您想不赚钱都难,android ,苹果,大数据,python我们没有赶上第一批,现在go语言您还想错过吗?现在go语言已经在大公司开始使用,在做服务这块慢慢已经走上热点,现在go语言视频很少而且很基础,我们早已经带着学员开始做实战了。go语言大神班为有一定基础且想深入学习go的学员量身打造,拒绝平庸,与众不同!专技术:对整个大数据生态圈的相关技术都有一定的研究,深入理解Go的原理,熟练使用GO技术解决各种业务需求。通过我们课程中的企业级项目和通俗易懂的知道点分析让你更加深了的掌握Go技术!懂架构:对业务有一定的了解,并且可以根据不同的业务场景设计出最优的技术架构。通过我们课程中的企业真实项目,全方位掌握项目的整个开发周期,达到触类旁通的目的!擅调优:一般其他语言开发项目一般都有一定的性能瓶颈,使用GO需要深入掌握项目技术架构特点和技术原理方可对项目中的瓶颈进行调优。通过项目中的调优经验让你掌握该技能!善沟通:GO在项目中扮演一个非常重要的角色,一般是在企业里做服务这块,需要跟各个部门进行协调沟通,所以要具备良好的沟通能力,业务对接能力! 课程研发环境及内容简介:1.课程研发环境项目源代码以Go1.9.2为基准,数据库以mysql为基准,以下环境都适用于项目。开发工具:VScode;数据库工具:mysql 2.内容简介什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于网站中一些稀缺或者特价的产品,电商网站一般会在约定的时间对其进行限量销售,因为这些产品的特殊性,会吸引大量用户前来抢购,并且会在约定时间同时在秒杀页面进行抢购。设计思路将
请求
拦截在系统上游,降低下流压力;秒杀系统特点就是并发量极大,但实际秒杀成功的
请求
数量确很少,所以如果不在前端拦截可能造成数据库读写锁冲突,甚至导致死锁,最终
请求
超时,甚至导致系统崩溃充分利用缓存:利用缓存可以极大提高系统读写速度消息队列:消息队列可以削峰,将拦截大量并发的
请求
,这也是一个异步处理过程,后台业务根据自己的处理能力,从消息队列中主动的拉取
请求
消息进行业务处理前端方案浏览器端(js):页面静态化:将活动页面上的所有可以静态的元素全部静态化,并尽量减少动态元素,通过CDN来抗峰值禁止重复提交:用户提交之后按钮置灰,禁止重复提交用户限流:在某一时间内只允许用户提交一次
请求
,比如可以采取IP限流后端方案服务器控制器层(网关层)限制UID(
userID
)访问频率:我们上面拦截了浏览器的访问
请求
,但准对某些恶意
请求
和攻击或者其他插件,在服务器控制层要准对同一个uid,限制访问频率 服务层上面只拦截了一部分
请求
,当秒杀的用户量非常大时,即使每个用户只有一个
请求
,到服务层的
请求
数量还是很大。比如我们有100w用户同时抢购100台手机,服务层并发
请求
压力至少为100w。1.采用消息队列缓存
请求
:既然服务器层知道库存只有100台手机,那完全没有必要把100w个
请求
都传递到数据库里,那么可以先把这些
请求
都写到消息队列里面缓存一下,数据库层订阅消息减少库存,减库存成功的
请求
返回秒杀成功,失败的返回秒杀结束2.利用缓存应对读
请求
:对类似12306等购票业务,是典型的读多写少业务,大部分
请求
时查询
请求
,所以可以利用缓存分担数据库压力3.利用缓存对写
请求
:缓存也是可以应对写
请求
,比如我们可以把数据库中库存数据迁移到Redis缓存中,所有减库存操作都在Redis中进行,然后通过后台进程把Redis中的用户秒杀
请求
同步到数据库中数据库层数据库层是最脆弱的一层,一般在应用设计时在上游就需要把
请求
拦截,数据库层只承担“能力范围内”的访问
请求
。所以,上面通过在服务层引入的队列和缓存,让底层的数据库高枕无忧
SpringBoot/Web项目防止表单/
请求
重复提交(单体和分布式)
SpringBoot/Web项目防止表单/
请求
重复提交(单机和分布式) 一、场景/方案 说起web项目的防止表单/
请求
重复提交,不得不说幂等性。 幂等性, 通俗的说就是一个接口, 多次发起同一个
请求
, 必须保证操作只能执行一次。 1.1、常见场景: • 订单接口, 不能多次创建订单 • 支付接口, 重复支付同一笔订单只能扣一次钱 • 支付宝回调接口, 可能会多次回调, 必须处理重复回调 ...
如何保证HTTP接口
请求
的安全呢?
在二家公司负责后台开发与APP接口开发。 那我们要如何对接口
请求
进行一个安全校验或者拦截非法
请求
呐? 1、选择拦截过滤器。 在
请求
的时候对
请求
方法进行一次拦截处理。比如非正常访问的方法已经注入插入可执行语句参数验证等在拦截中进行一次安全校验保证
请求
不是非法
请求
。 2、数据加密。我们知道目前大部分APP接口都是通过Http协议进行调用的容易被抓包拦截。 我们可以对客户端和服务端都对数据
vue+axios
请求
时设置
请求
头(带上token)
1.在vue中,向后台发送
请求
,不管是get或post,url要带上
userId
,headers要带上token值 PS:登录成功后,后台会返回token和
userId
,存储在本地。但是跳转到其他页面时没有token,会报错undefined,所以每次
请求
都要带上token值。(每次跳页面, 都要获取新路由对应的html页面, 这时候可以用axios的http拦截每次路由跳转, 都先让后台验证一下...
如何保证token的
安全性
?
引入如何保证token的
安全性
?原文在连接中,这里只是防止丢失做的备份。 接口的
安全性
主要围绕token、timestamp和sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看: Token授权机制: 用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-
UserId
以键值对的形式存放在缓存服务器中。服务端接收到
请求
后进行Token验证,如果Token不存在,说明
请求
无效。Token是客户端访问服务端的凭证。 时间戳超时机制: 用户每次
请求
都带上
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章