权限认证常见面试题

简介: 权限认证常见面试题

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

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

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

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

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

二、Cookie和Session有什么区别?

三、如果没有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当中。

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

相关文章
|
7月前
|
JavaScript 前端开发 Java
面试官问我按钮级别权限怎么控制,我说v-if,面试官说再见
面试官问我按钮级别权限怎么控制,我说v-if,面试官说再见
|
4月前
|
JavaScript 前端开发 数据处理
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
这篇文章讨论了Vue中实现权限管理的策略,包括接口权限、路由权限、菜单权限和按钮权限的控制方法,并提供了不同的实现方案及代码示例,以确保用户只能访问被授权的资源。
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
|
4月前
|
Java
【Java基础面试三】、说一说你对Java访问权限的了解
这篇文章介绍了Java中的四种访问权限:private、default(无修饰符时的访问权限)、protected和public,以及它们分别在修饰成员变量/方法和类时的不同访问级别和规则。
【Java基础面试三】、说一说你对Java访问权限的了解
|
7月前
|
Java 数据库连接 数据安全/隐私保护
springBoot集成token认证,最全Java面试知识点梳理
springBoot集成token认证,最全Java面试知识点梳理
|
JavaScript 前端开发 数据处理
「Vue面试题」vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
「Vue面试题」vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
133 0
|
设计模式 Java 安全
Java中包的作用以及使用、访问权限、单例/多例设计模式、枚举和异常(附带相关面试题)
本章节讲述以下方面知识点 1.包的作用以及使用 2.单例/多例化设计模式 3.枚举 4.访问权限2.异常
85 0
Java中包的作用以及使用、访问权限、单例/多例设计模式、枚举和异常(附带相关面试题)
|
前端开发 API
【面试题】:前端怎么实现权限设计及遇到的bug
前端怎么实现权限设计及遇到的bug
218 0
|
SQL Shell 数据库
【Django | 开发】面试招聘信息网站(划分面试官权限&集成钉钉消息)
【Django | 开发】面试招聘信息网站(划分面试官权限&集成钉钉消息)
【Django | 开发】面试招聘信息网站(划分面试官权限&集成钉钉消息)
|
前端开发 Python
【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)
【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)
【Django | 开发】面试招聘信息网站(处理产品细节和权限&美化页面样式)
|
Linux 测试技术
软件测试Linux面试题:将start.sh文件改为可执行权限
软件测试Linux面试题:将start.sh文件改为可执行权限
132 0