失效的身份认证和会话管理
什么是身份认证
常见的身份认证可见于以用户名密码的形式进行系统登录,在安全性较高的情况下,还会伴有很多登录认证方式。
认证方式又有很多种,EX:静态口令、OTP(动态口令)、AD域认证、证书、验证码等。
身份认证的结果往往是获得一个令牌,通常放在Cookie中,之后对用户身份的识别根据这个授权的令牌进行识别,而不需要每次都要登陆。
什么是会话管理
客户端不断地向服务端发送请求并获得响应的一系列交互过程,请求并建立关联的过程被称为会话管理。
在服务端第一次接收到客户端的请求的时候,会产生一个初始化的会话,并分配给该会话一个标识符。在后面的请求中,客户端的请求都必须包含此标识符,拥有此标识符,服务端才会把新的请求和对应的会话联系起来。
什么是Cookie
其实cookies是由网络服务器存储在你电脑硬盘上的一个txt类型的小文件,它和你的网络浏览行为有关,所以存储在你电脑上的cookies就好像你的一张身份证,你电脑上的cookies和其他电脑上的cookies是不一样的;cookies不能被视作代码执行,也不能成为病毒,所以它对你基本无害。
什么是失效的身份认证和会话管理
原理:程序员再开发Web程序是,开发人员往往只关注Web程序所需要实现的功能。常常会建立自定义的认证和会话方案。但是要正确的实现这些方案是很难的,产生的结果就是在用户:退出、密码管理、超时重登、记住我、密码找回、账户更新等方便出现很多漏洞。因为每一个功能的实现方式都不同,所以想找出这些漏洞有时就很困难。
危害:这些漏洞的存在,就会使得恶意用户有机可乘,可能会被窃取或操纵用户的会话和Cookie,进而模仿网络上的合法用户。
如何判断是否存在失效的身份验证和会话管理
首先需要明白,最需要保护的数据是认证凭证和会话ID。
用户身份验证没有使用哈希(Hashing)或加密保护。
认证凭证是否可猜测,或者能够能够通过薄弱的账户管理功能重写。
账户管理功能:创建账户、修改密码、密码恢复、弱会话ID重写等。
会话ID暴露在URL里(例如URL重写)。
URL重写:简单来说就是将客户的URL请求重定向到你指定的URL。
会话ID容易受到固定的攻击。
会话ID没有超时限制,或者用户会话或身份验证令牌特别是单点登录令牌在用户注销时没有失效。
单点登录(SSO):用户只要登录了其中一个系统,就可以访问其他相关系统,而不用进行身份验证登录。
成功注册后,会话ID没有轮转。
密码、会话ID和其他认证凭据使用未加密连接传输。
如何防范
区分公共区域和受限区域
我的理解:某应用部分功能只有开通VIP、SVIP、大SVIP才可使用
对最终用户帐户使用帐户锁定策略
我的理解:当一个用户多次登陆失败后,对帐户进行锁定。常见于Android系统的数字密码,多次输入错误会限制多少时间后在尝试。
支持密码有效期
我的理解:通过设置密码有天数来强制用户更改密码。
能够禁用帐户
我的理解:当用户执行删除等类似含有风险的命令时,可以对帐户进行锁定。
不要在用户存储中存储密码
我的理解:登录旁边的 记住我
要求使用强密码
我的理解:强制用户使用复杂密码,比如:大小写、数字、特殊字符、长度
不要在网络上以纯文本形式发送密码
当有人向你借号,请加密后发给他
保护身份验证 Cookie
使用 SSL 保护会话身份验证 Cookie
对身份验证 cookie 的内容进行加密
限制会话寿命
避免未经授权访问会话状态
(具体防范方式可以参考以下URL://blog.csdn.net/whoim_i/article/details/103171346)
—end—