SaaS系统的接口对资源访问范围进行限制
来源:互联网 发布:淘宝托管公司收费 编辑:程序博客网 时间:2024/05/20 13:40
SaaS系统中,不同用户的资源应该是互相不可见的,但我们系统中,已登录的用户A,如果篡改掉接口调用的参数,是可以访问到其它用户的资源的。其实早就意识到这个问题了,前段时间才抽空把这个洞给补上,现在把方法记下来,供更多的同学们参考。
1. 问题
系统前后台分离,通过http接口调用。用户有很多不同类型的资源,用户查看资源一般是先看列表,再点详情。点详情时,通过http://abc.com/resource/info.do/xxx来获得(xxx是资源的id)。问题来了,已登录的用户A,看到浏览器的http访问,把xxx参数一改,很容易就看到其它用户的资源了。
2. 分析
问题很简单,估计大家会想,在接口中检查一下资源的归属不就行了。但当资源有N多种,还有层级关系的时候,事情就没这么简单了。
比如在线投票系统,先有投票,有选项,投票有结果。在查看投票结果的接口里,检查投票结果的归属要查好几层表才能确定。如果投票结果还能在一定范围内共享可见时,查明归属权限是件很麻烦的事。
3. 解决办法
a. 在资源中增加签名,签名用md5(资源id+日期+"abcdef")来生成。最简单的是在资源的bean class里加上getSign()方法
b. 资源列表中获得每个资源的sign,在详情接口中把签名做为sign参数带上
c. 在接口前面加一个filter,校验sign
4. 反思
其实还有一些简单的办法,比如资源id用uuid,或者资源id中本身就带有所有者的标记。不过这些只有在系统开始设计的时候就想好,后面再改就难了。
这个漏洞导致用户资源裸奔了这么久,感到深深的羞愧啊!~
过程中研究了微信服务号的做法,但没整明白。只知道每个接口需要带一个签名参数,每个接口的签名参数都是一样的,通过修改资源id,微信可以知道资源不属于我。不知道微信在后台是怎么做的。如果有懂的同学麻烦给解惑一下哈。
PS,好久不写博客了,这个编辑器真难用
- SaaS系统的接口对资源访问范围进行限制
- 限制对Web资源的访问
- JSP页面中限制对 Web 资源的访问
- 利用ulimit对资源进行限制
- 使用 docker 对容器资源进行限制
- 限制系统管理员对SQL Server进行访问
- android EditText 对输入字数和内容范围进行限制
- Android EditText 对输入字数和内容范围进行限制
- 网站的访问ip中找出进行频繁连接的ip,并对这些ip的访问频率进行限制。
- 用web.xml控制Web应用的行为( 限制对Web资源的访问)
- Oracle中对用户所能使用的数据库资源进行限制
- 浏览器不能访问本地资源的限制
- cxf+spring开发(三)--- 限制固定Ip地址对接口的访问次数
- 使用Profile对用户Session会话进行资源限制
- 使用Profile对用户Session会话进行资源限制
- 使用redis进行用户接口访问时间次数限制
- [操作系统设置]利用IPSec对指定的ip进行访问限制
- 迅雷对电驴资源的限制
- git实用操作
- Rviz教程(十一):Rviz in Stereo
- Python中的sorted函数以及operator.itemgetter函数
- [编程题] 分苹果
- linux线程实现机制(下)
- SaaS系统的接口对资源访问范围进行限制
- 组合模式
- 【Tomcat】一分钟教你eclipse如何配置tomcat
- JSP内置对象
- JDK中的线程池 :工作队列和拒绝策略 上
- [AHK]Get office version
- 基于python的web框架——Flask 学习笔记
- Toast用法!!
- 欢迎使用CSDN-markdown编辑器