写点什么

权限认证与授权三问三答

作者:浅羽技术
  • 2022 年 8 月 27 日
    四川
  • 本文字数:1184 字

    阅读完需:约 4 分钟

权限认证与授权三问三答

一、什么是认证和授权?如何设计一个权限认证框架?

认证: 就是对系统访问者的身份进行确认。 用户名密码登录、 二维码登录、手机短信登录、指纹、刷脸。。。


授权:就是对系统访问者的行为进行控制。授权通常是在认证之后,对系统内的用户隐私数据进行保护。后台接口访问权限、前台控件的访问权限。


RBAC 模型: 主体 -》 角色 -》 资源 -》访问系统的行为。


认证和授权也是对一个权限认证框架进行扩展的两个主要的方面。

二、如果没有 Cookie,Session 还能进行身份验证吗?

当服务器 tomcat 第一次接收到客户端的请求时,会开辟一块独立的 session 空间,建立一个 session 对象,同时会生成一个 session id,通过响应头的方式保存到客户端浏览器的 cookie 当中。以后客户端的每次请求,都会在请求头部带上这个 session id,这样就可以对应上服务端的一些会话的相关信息,比如用户的登录状态。


如果没有客户端的 Cookie,Session 是无法进行身份验证的。


当服务端从单体应用升级为分布式之后,cookie+session 这种机制要怎么扩展?


1、session 黏贴: 在负载均衡中,通过一个机制保证同一个客户端的所有请求都会转发到同一个 tomcat 实例当中。问题: 当这个 tomcat 实例出现问题之后,请求就会被转发到其他实例,这时候用户的 session 信息就丢了。


2、session 复制: 当一个 tomcat 实例上保存了 session 信息后,主动将 session 复制到集群中的其他实例。问题: 复制是需要时间的,在复制过程中,容易产生 session 信息丢失。


3、session 共享: 就是将服务端的 session 信息保存到一个第三方中,比如 Redis。

三、什么是 CSRF 攻击?如何防止?

CSRF: Cross Site Requst Forgery 跨站请求伪造


一个正常的请求会将合法用户的 session id 保存到浏览器的 cookie。这时候,如果用户在浏览器中打来另一个 tab 页, 那这个 tab 页也是可以获得浏览器的 cookie。黑客就可以利用这个 cookie 信息进行攻击。


攻击过程:


1、某银行网站 A 可以以 GET 请求的方式发起转账操作。 www.xxx.com/transfor.do?accountNum=100&money=1000 accountNum 表示目标账户。这个请求肯定是需要登录才可以正常访问的。


2、攻击者在某个论坛或者网站上,上传一个图片,链接地址是 www.xxx.com/transfer.do?accountNum=888&money=10000 其中这个 accountNum 就是攻击者自己的银行账户。


3、如果有一个用户,登录了银行网站,然后又打开浏览器的另一个 tab 页,点击了这个图片。这时,银行就会受理到一个带了正确 cookie 的请求,就会完成转账。用户的钱就被盗了。


CSRF 方式方式:


1、尽量使用 POST 请求,限制 GET 请求。POST 请求可以带请求体,攻击者就不容易伪造出请求。


2、将 cookie 设置为 HttpOnly : respose.setHeader("Set-Cookie","cookiename=cookievalue;HttpOnly")。


3、增加 token;


在请求中放入一个攻击者无法伪造的信息,并且该信息不存在于 cookie 当中。


<input type='hidden' value='adfasdf'/>


这也是 Spring Security 框架中采用的防范方式。

发布于: 刚刚阅读数: 4
用户头像

浅羽技术

关注

才疏学浅,习习而为,编程羽录,与你同行。 2019.02.26 加入

分享一些计算机信息知识、理论技术、工具资源、软件介绍、后端开发、面试、工作感想以及生活随想等一系列文章。

评论

发布
暂无评论
权限认证与授权三问三答_框架_浅羽技术_InfoQ写作社区