本章节将讨论如何防止在我们的身份验证机制中发生前面所讨论的那些漏洞。
身份验证是一块很复杂的内容,有很多容易的弱点或缺陷可以被利用。把所有可能的措施都例举出来保护自己的网站显然是不可能的,不过我们通常应该始终遵循一些原则。
注意用户凭据安全
如果无意中向攻击者披露了一组有效的登录凭据,那么即使是最强大的身份验证机制也是无效的。
因此,我们永远不要通过未加密的连接来发送任何登录数据,如果已经为登录请求实现了HTTPS,那么确保通过任何HTTP请求也重定向到HTTPS来强制执行这个操作。
比如,审核下网站,确保没有用户名或电子邮件地址通过可公开访问的配置文件或在HTTP响应中被披露。
不要将安全机制依赖在用户身上
严格的身份验证措施通常需要用户付出一些额外的努力,但人性使然,一些用户不可避免的会想方设法来偷懒。因此我们需要尽可能地强制执行安全行为。
最明显的例子就是实施有效的密码策略。因为人们通常习惯使用那些容易被预测到的密码,因此我们可以通过密码检查器来提高用户密码的强度,这样就会比传统策略更有效地强制使用安全密码。
防止用户名枚举
如果系统上的用户被透露出去,攻击者就更容易破坏身份验证机制。设置在某些情况下,由于不同网站的不同性质,某个人的用户名本身就是敏感信息。
因此,无论攻击者在尝试的用户名是否有效,都要使用相同的通用错误信息,并要确保这些信息完全是相同的。应该始终为每个登录请求返回相同的HTTP状态码,最后,使不同场景中的响应时间尽可能难以区分。
实施强大的防暴力破解
由于构建暴力攻击是很简单的一件事情,因此确保防止或破坏任何暴力登录是非常重要的。
一种比较有效的防范是实施严格的、基于IP的用户速率限制。可以包括防止攻击者操作其明显IP地址的措施。理想情况下,我们应该要求用户在达到特定限制后每次登录尝试都完成验证码测试。
但是记住,这并不能保证完全消除暴力破解的威胁。但是,使该过程尽可能繁琐和手动工作量会增加任何潜在攻击者放弃并转而寻找更容易的目标。
三重检查验证逻辑
正如前面试验场景所证明的那样,在身份验证过程中简单的逻辑缺陷很容易潜入代码中,有可能会危及网站和用户。因此,彻底审计任何验证或确认逻辑以消除缺陷是至关重要的,可以绕过的检查跟没有检查其实效果差不多。
不要忘记其他功能
确保不要只关注登录页面而忽略了与身份验相关的其他功能。在攻击者可以自由注册自己的账号并探索这些功能的场景下,这点尤为重要。尤其是密码重置或更改与登录机制一样的操作都会容易遭到攻击。
适当地实施多因素身份验证
虽然多因素身份验证并不一定适用于每个网站,但如果做得好,它比单独基于密码的登录要安全得多。但是记住,验证同一因素的多个实例并不是真正的多因素身份验证,通过电子邮件发送验证码本质上只是一种更冗长的单因素身份验证形式而已。
基于SMS的双因素身份验证在技术验证两个因素(知道的和拥有的)。但是例如通过SIM交换可能会被滥用,这意味着该系统可能不是非常可靠。
在理想情况下,双因素身份验证应该使用直接生成验证码的专用设备或应用程序来实施,因为它们是专门为提供安全性而构建的,相对来说更安全些。
最后,就像主身份验证逻辑一样,确保双因素身份验证检查中的逻辑是否合理,这样就不会被轻易的绕过了。
身份验证漏洞-多因素身份验证中的漏洞(上)
身份验证漏洞-基于密码的登录漏洞(上)
SQL注入攻击-检索隐藏的数据
HTTP高级请求走私-HTTP请求隧道(上)
HTTP高级请求走私-CRLF的利用(上)
HTTP高级请求走私-响应队列中毒
HTTP Host头漏洞-密码重置投毒
HTTP Host头漏洞攻击-概念梳理
原文始发于微信公众号(H君网安白话):身份验证漏洞-如何保护身份验证机制
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论