许多安全专家都警告用户不要使用“隐匿式的安全(通过隐藏而实现安全性)”作为一种防卫机制。但是,密码和验证证书(许多安全系统的中心内容)都使用隐匿式的安全。密码的强度完全取决于我们的期望,即没有人能够通过猜测或其他方法发现密码。
假设有足够的时间,利用一些系统弱点,或者通过暴力猜测的攻击过程,攻击者可以发现密码。惟一的防卫措施是定期改变密码,努力在别人有机会发现当前密码之前就改变它。因此,所有Web应用程序都包含的一个重要特性就是能够改变密码。
我曾经了解到一家使用金融贸易应用程序的公司,该应用程序需要用户登录,才能进行交易。大多数经纪人每天都执行很多交易,因此他们简单地在屏幕上最小化Web浏览器,并且保持登录状态。经纪人抱怨他们必须经常验证,因为浏览器会话已经超时,因此开发者消除了服务器上的所有会话超时。每一天结束时,大多数经纪人都会让计算机保持运行,其中大多数人都不会退出这个浏览器应用程序,同时保持登录到该应用程序。一些用户有时会整个星期都在使用一个浏览器会话。
保持开放的会话将带来很大的风险,但更大的风险是应用程序如何管理密码的改变。为了设置新密码,用户可浏览选择页面,点击链接以改变密码,然后输入新的密码。但是,考虑如下的情况:另一个经纪人等待目标前去吃午饭,然后使用目标的开放会话设置新的密码,而不需要知道原有的密码。目标的会话保持登录,直到下个星期,但另一个经纪人已经使用新的密码具有访问该账户的完全权限。直到目标被迫再次登录时,才会发现密码已经改变。
如果用户并不是定期改变密码,其他人发现密码,并且因此获得账户访问权限的可能性越来越大。改变密码越困难,用户越不可能改变密码。如果没有提醒或迫使用户定期改变密码,则这种情况会变得更加严重。如果没有输入原有密码、会话过期和通知用户相应改变等技术,攻击者就能够在不被发觉的情况下更长时间地使用该账户。
设计系统时,让改变密码的过程简单且直观。避免发生改变密码困难重重的实际情况,例如过度要求密码复杂性。在改变密码前后总是要求验证。
在用户登录后,提供完成最常用账户管理任务的快速链接,这些任务包括改变密码。如果安全策略并不需要用户改变原有密码,则可以考虑使用一个包括链接的简单警告,如图1-6所示。
密码改变页面应该由3个文本框组成:一个用于输入原有密码,一个用于输入新密码,第三个则用于验证新密码。图1-3演示了重新设置密码的界面。
为了防止匿名暴力攻击,密码改变页面只可用于已验证用户的活动会话。
安全策略
n 总是允许用户自己改变密码。
n 用户可以直观并简单地改变密码。
n 提醒或强迫用户定期改变密码。
n 需要知道原有的密码才能改变新密码。
n 需要用户输入两次新密码,以确保准确性。
n 通过电子邮件或其他通信方式确认账户改变。
n 改变密码后,终止所有活动的会话,并且要求验证。