认证与授权(访问控制)

OWASP

认证

密码维度

单因素认证、双因素认证、多因素认证(密码、手机动态口令、数字证书、指纹等各种凭证)。

密码强度

长度:普通应用6位以上;重要应用8位以上,考虑双因素;

复杂度:密码区分大小写;密码为大写字母、小写字母、数字、特殊符号中两种以上的组合;不要有(语义上)连续性的字符,比如123、abc;避免出现重复字符,比如 111;不要使用用户的公开数据,或与个人隐私相关的数据作为密码,比如 QQ 号、身份证、手机号、生日、昵称、英文名、公司名等。

密码保存

密码必须以不可逆的加密算法,或单项散列函数算法,加密后存储在数据库中。目前业界比较普遍的做法:在用户注册时就已经将密码哈希(MD5、SHA-1,不可逆,不冲突)后保存在数据库中,登录时验证密码仅仅是验证用户提交的密码哈希值是否与保存在数据库中的密码哈希值一致,即服务器不会保存密码原文。

破解 MD5 后密码的方法——彩虹表:收集尽可能多的明文密码和对应的 MD5 值,然后通过 MD5 值反查到该 MD5值对应的密码原文。防御方法:加盐,即 MD5(Username+Password+Salt),其中 Salt 为一个固定的随机字符串,应该保存在服务器端的配置文件中,妥善保管。

SessionID(会话编号)

当登录认证成功后,服务器分配一个唯一凭证 —— SessionID 作为后续访问的认证媒介。会话(Session)中会保存用户的状态和其他相关信息,当用户的浏览器发起一次访问请求时,将该用户持有的 SessionID 上传给服务器。常见做法是将 SessionID 加密后保存在 Cookie 中,因为 Cookie 会随着 HTTP 请求头发送,且受到浏览器同源策略的保护。生成的 SessionID 要足够随机,比较成熟的开发框架都会提供 Cookie 管理、Session 管理的函数,要善用这些函数和功能。

风险

一旦有效的 SessionID 泄露,则在其有效期内攻击者能够以对应用户的身份访问站点。泄露方式:Cookie 泄露(SessionID 保存在 Cookie 中的情况),Referer 的 URL 中泄露(URL 携带 SessionID 的情况)。

Session Fixation 攻击

SessionID 没有及时更替、销毁,导致旧的 SessionID 仍然有效,一旦激活便可以正常使用。防御方法:在用户登录完成后要重新设置 SessionID;用户更换访问设备的时候要求重新登录;使用 Cookie 代替 SessionID 的作用。

Session 保持攻击

Session 是有生命周期的,当用户长时间未活动,或用户点击退出后,服务器将销毁 Session。① 如果只依赖 Session 的生命周期来控制认证的有效期,Session 保持攻击可以通过脚本持续刷新页面(发送访问请求)来保持 Session 的活性。② 如果 SessionID 保存在 Cookie 中,依赖 Cookie 的定时失效机制来控制认证的有效期,那 Session 保存攻击可以手动地修改 Cookie 的失效时间,甚至将 Cookie 设置为永久有效的 Third-party Cookie,以此延长 Session 的活性(Cookie 是可以完全由客户端控制的)。防御方法:用户登录一定时间后强制销毁 Session;当用户的客户端(IP、UserAgent、device)发生变化的时候要求重新登录; 每个用户只允许拥有一个 Session。

SSO(Single Sign On,单点登录)

统一认证,缺点是风险集中,单点一旦被攻破,影响范围涉及所有用单点登录的系统,降低这种风险的办法是在一些敏感的系统里再单独实现一些额外的认证机制(比如网上支付平台,在付款前要求用户输入支付密码,或通过手机短信验证用户身份)。

目前业内最为开放和流行的单点登录系统是 OpenID —— 一个开放的单点登录框架,使用 URI 作为用户在互联网上的身份标识。每个用户将拥有一个唯一的 URI。在用户登录网站时,只需提交他的 OpenID(URI)以及 OpenID 的提供者,网站就会将用户重定向到 OpenID 的提供者进行认证,认证完成后重定向回网站。

例如用户 Ricky 在 OpenID 服务的提供者 openidprovider.com 拥有一个 URI,ricky.openidprovider.com;此时他准备访问某网站的一个页面(www.xxx.com/yyy.html),在xxx网站的登录界面会提示请用 OpenID 登录;于是 Ricky 输入他的 OpenID(URI),即 ricky.openidprovider.com,然后点击登录;页面将跳转到 openidprovider.com 站点,进入认证阶段;当认证成功后页面自动跳转到 www.xxx.com/yyy.html,如果认证失败则不会跳转。

授权

Web 应用中,根据访问客体的不同,常见的访问控制可分为 基于 URL 的访问控制(常用),基于方法(method)的访问控制(基于 Java 的 Web 应用中) 和 基于数据的访问控制。

垂直权限管理

定义角色,建立角色与权限的对应关系——基于角色的访问控制(Role-Based Access Control,RBAC)。用户→角色→权限。例如 Spring Security 中的权限管理(功能强大,但缺乏一个管理界面可供用户灵活配置,每次调整权限都要重新修改配置文件或代码);PHP 框架 Zend Framework 中使用 Zend ACL 做权限管理。使用 RBAC 模型管理权限时应当使用 “最小权限原则”,“默认拒绝”。

水平权限管理

水平权限问题出现在 RBAC 模型中的同一种角色的权限控制上,系统只验证了能访问数据的角色,但没有反过来再对用户与数据的权限关系做细分。此时需要基于数据的访问控制。

OAuth

OAuth 是一个在不提供用户名和密码的情况下,授权第三方应用访问 Web 资源的安全协议。三个角色:用户(User)、服务提供方(Server)、资源持有者(Resource Owner)。现在的版本是 OAuth2.0。

没必要自己完全实现一个 OAuth 协议,使用第三方实现的 OAuth 库是个不错的选择:

ActionScript/Flash,C/C++,clojure,.NET,Erlang,Java,JavaScript,Perl,PHP,Python,Qt,Ruby,Scala 都有。

时间: 2024-10-08 19:30:08

认证与授权(访问控制)的相关文章

Apache Shiro 认证、授权、加密和会话管理

官方解释 : Apache Shiro(日语"堡垒(Castle)"的意思)是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用.移动应用到大型网络及企业应用. Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API: 认证 - 用户身份识别,常被称为用户"登录": 授权 - 访问控制: 密码加密 - 保护或隐藏数据防止被偷窥: 会话管理 - 每用户相关的时间敏感的状态. Shi

Kubernetes之(十五)身份认证,授权,准入控制

目录 Kubernetes之(十五)身份认证,授权,准入控制 ServiceAccount 创建serviceaccount 自定义serviceaccount 自建证书和账号进行访问apiserver RBAC简介 Kubernetes RBAC演示 RBAC的三种授权访问 Kubernetes之(十五)身份认证,授权,准入控制 API Server作为Kubernetes网关,是访问和管理资源对象的唯一入口,其各种集群组件访问资源都需要经过网关才能进行正常访问和管理.每一次的访问请求都需要进

kubernetes认证、授权、准入控制

1 总述 1 概述 kubernetes 中的资源访问类型有两种,一种是由POD提供的服务资源,其可通过service或 ingress提供接口以供外部访问,这种访问不需要经过API server的认证,而另一种对集群内部资源的操作则需要经过一定的认证授权操作才能完成. 2 认证,授权,准入控制概述 1 概述 任何客户端在操作相关资源对象时必须经过三个步骤:认证: 身份鉴别,正确的账号,能够通过认证,其只能证明其是合法的账户.授权: 权限检查,对资源进行相应的操作.其可操作某些资源,其某些资源需

BOS项目 第7天(shiro权限框架进行认证和授权)

BOS项目笔记 第7天 今天内容安排: 1.权限概述(认证.授权) 2.常见的权限控制的方式(URL拦截权限控制.方法注解权限控制) 3.权限数据模型(权限表.角色表.用户表.角色权限关系表.用户角色关系表) 4.shiro框架入门 5.将shiro应用到bos项目中进行认证和授权 1. 权限概述 系统提供了很多功能,并不是所有的用户登录系统都可以操作这些功能.我们需要对用户的访问进行控制. 认证:系统提供的用于识别用户身份的功能(通常是登录功能)-----让系统知道你是谁?? 授权:系统提供的

Apache Httpd服务器之认证与授权

有大概1个月的时间没有继续写关于技术的文章了,在这一个月的时间除了过年休息了2天外,其它时间我都在开发自己的个人网站,这是一个能帮助PHPer及从事运维的兄弟便捷搭建LAMP配置环境的功能性网站,稍后会详细介绍下,从今天开始,我会继续撰写关于Httpd服务器的一些配置文章.此篇文章,我们主要探讨下关于Httpd服务器的认证及授权. 所谓认证,在我的理解就是用户通过一个凭证进入服务器的过程,而授权是用户是否有权限获取服务器中的某个资源.认证负责的是整体,授权负责的是局部. Httpd提供浏览器认证

Web Api 2 认证与授权 2

HTTP Message Handler 在 Web Api 2 认证与授权 中讲解了几种实现机制,本篇就详细讲解 Message Handler 的实现方式 关于 Message Handler 在 request 到 response 过程所处于的位置,可以参考这里 HTTP Message Handlers Authentication Message Handler 先看一段实现的代码,然后再做讲解,完整代码可以在 Github 上参考,WebApi2.Authentication 1

MVC 登录认证与授权

最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    最近在做自学MVC,遇到的问题很多,索性一点点总结下. 正题: 做过三层架构的童鞋都知道,如果要验证/授权一个用户登录,我们一般采取如下方法: 1.用户输入用户名.密码进行登录 2.账户/密码正确,保存用户信息至Cookies或者Session,跳转至主页面 3.在主页面Page_Load的时候,判断Cookies或者Session的值,如果Coo

入门教程:.NET开源OpenID Connect 和OAuth解决方案IdentityServer v3 MVC认证与授权(四)

本教程将搭建一个最小能够运行的IdentityServer.为简单起见,我们将identityserver和客户端放在同一Web应用程序-这可能不会是一个很现实的情况下,但可以让你不太复杂的开始. 完整的源代码可以在这里找到. Part 1 - MVC MVC认证与授权 在第一部分中我们将创建一个简单的MVC应用程序并添加认证通过identityserver它.然后,我们将有一个更仔细的看claims,claims的变化和授权. 创建一个 web application 在Visual Stud

OAuth2.0认证和授权原理

什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密码提供给该第三方网站. OAuth允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源. 二.OAuth的原理和授权流程 OAuth的认证和授权的过程中涉及的三方包括: 服务商:用户使用服务的提供方,一般用来存消息.储照片.视频.联系人.文件等(

Python+Django+SAE系列教程17-----authauth (认证与授权)系统1

通过session,我们可以在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们需要认证. 当然了,Django 也提供了工具来处理这样的常见任务(就像其他常见任务一样). Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话.这个系统一般被称为 auth/auth (认证与授权)系统. 这个系统的名称同时也表明了用户常见的两步处理. 我们需要: 1.     验证 (认证) 用户是否是他所宣