你有了工作,却成了工作的一部分。 ——《出租车司机》
本质:建立用户和权限之间的对应关系
What Can I Do
在网络中:
- 为了保证网络资源的安全,一般是通过路由设备或者防火墙建立基于IP的访问控制
- 此时,主体对客体的操作是对客体的某个端口发起网络请求。这个请求能否成功,取决于受到的防火墙ACL策略的限制
在操作系统中:
- 操作系统也会给文件设置ACL(访问控制列表),表现在文件拥有者、文件拥有者所在的用户组、其他用户对于文件的读、写、执行权力
在web应用中,根据访问客体的不同,常见的访问控制可以分为:
- 基于URL的访问控制
- 基于method的访问控制
- 基于数据的访问控制
基于URL的访问控制是最常见的,也有网站出过漏洞:
- 在正常情况下,管理员后台的页面时只有管理员才能访问的,这些后台不会链接到前台,用怕充实爬不到的。但有一次网站没有对用户访问权限进行显示,导致只要用户构造出了管理的URL,就能访问这些资源
- 把需要保护的网页“藏”起来,并不明智,因为hacker的常用招式就是用一本有很多后台路径的字典来遍历
垂直权限管理
- 垂直权限管理:基于角色的权限管理(RBAC模型)
- RBAC会定义不同的角色,这些角色时权限的集合,然后为每个用户分配角色
- 例如(基于URL的访问控制):在公司中,每个角色包含他能访问的URL,然后再给每一个用户分配一个角色
- 同理,基于method的访问控制,就是每个角色包含他能使用的method
- 还有一些变体,例如“基于表达式的访问控制”
- Sping Security中的权限管理,是一套比较全面的Web安全解决方案。它是垂直权限管理的,主要提供“基于URL的访问控制”和“基于method的访问控制”,还支持“基于表达式的访问控制”
- 一般高权限角色可以访问低权限的资源,反过来是不行的,如果行的话,就发生了越权访问
避免越权访问
- 贯彻最小权限原则
- 使用默认拒绝的策略,只对有需要的用户单独配置允许权限
水平权限管理
- 水平权限管理:基于数据的访问控制
- 垂直权限管理并不够用,例如小红和小明是不同的用户,分配到的角色是相同的,但小明通过修改url的参数,看到了小红的一些隐私数据。这时候就需要水平权限管理。
- 可以考虑实现一个Group,一个用户的数据,只有这个组中的成员可以查看,当然这个组可以只有一个人
OAuth简介
- OAuth时一个在不提供用户名和密码的情况下,授权第三方应用访问web资源的安全协议
- OAuth和OpenID都致力于让互联网更加开放,OpenID解决的事认证问题,OAuth解决的事认证问题
- OAuth使用场景:一个网站想要获取一个用户在第三方网站中的某些资源和服务
例子:
- Jane在
faji.com
上有2张照片,她想分享到beppa.com
上 - 在
beppa.com
上选择要从faji.com
分享图片 beppa.com
在后台创建了一个临时凭证(request token)- 页面跳转到
faji.com
的OAuth页面,要求Jane登录(这里是在faji.com
登录) - 登录成功后,
faji.com
询问Jane是否授权beppa.com
访问自己的私有照片 - 如果允许授权,
faji.com
会把这个request token变成access token beppa.com
通过这个access token就可以获取faji.com
上Jane的照片了
本文作者:
Bano
本文链接: https://bano247.com/2021/11/06/访问控制/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://bano247.com/2021/11/06/访问控制/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!