Web应用认证安全最佳实践(精简版)
上一篇 /
下一篇 2011-09-03 10:29:29
/ 个人分类:Web应用安全
为了增强Web应用认证系统对外部攻击的抵抗能力,应该在设计开发和
测试阶段从认证手段、权限控制、凭证保密、凭证强度、阀值管理、账户管理以及业务设计等方面进行充分考虑。
1、认证手段- 尽可能复用成熟、可信的认证系统
- 对于安全性要求级别高的应用或模块,需要使用双因素或多因素认证
- “安全问答”会带来很大的安全隐患,尽量不要使用
- 避免使用可伪造的基础设施作为认证条件
- 认证或注册功能的提示信息不要太精确
- 避免依赖基于CAPTCHA等技术的图形验证码
2、权限控制- 除了特意要完全公开的资源,其它的都需要经过认证
- 尽量对应用中的各类资源使用通用的权限控制方式
- 所有认证控制必须在服务器端强制执行
- 必须使用最低权限访问外部系统
- 避免使用各类默认账户及简单的、容易被联想到的口令
3、阀值管理- 通过增加阀值管理可以避免部分IP独占认证服务的资源(CPU、I/O、带宽等)
- 对于允许外网注册、登录的应用,认证相关的请求(业务)一定要进行阀值管理
- 对于多次尝试认证失败的账户应该采用延时等待及自动锁定策略
- 统计认证失败次数时应该考虑分布式攻击的情况
- 在账户登录成功后应该有提示该账户失败认证次数及详细信息的功能
- 应该提供显示“最近一次登录时间”的功能
- 应该区分不同原因导致的账户锁定
4、凭证保密- 口令输入域不能回显用户口令、不能有自动补全功能
- 提供Remember Me功能时一定要非常慎重
- 认证凭证的传输、存储一定要加密,并且加密后的存储位置也要确保安全可信
- 认证凭证的加密算法应该提供多套,并支持快速的灵活切换
- 确保任何人(包括数据库管理员)都无法获取、篡改其他用户的口令
- 绝对避免硬编码账户信息
5、凭证强度- 通过校验规则禁止使用过于简单的口令
- 整个应用中的口令校验规则要集中、统一,而且必须有后台校验
- 认证凭证的校验规则最好是可配置的
- 确保过期的账户及其认证凭证不能继续使用
- 密码修改的功能必须易用,同时应该提供密码强度校验提示
- 不要指望用户会经常修改密码,强制执行会导致用户将口令记在更不安全的地方
6、账户管理- 应该提供管理从未登录、闲置、被锁定等状态账户的功能
- 不要直接或间接的提供给管理员(或其他账户)查看、更改他人口令的的功能
7、业务设计- 确保用户可以很方便的通过正常的(推荐的)方式退出系统
- 登录后执行敏感的操作时需要二次认证
- 对重要交易使用交易标记
- 确保认证相关操作失败/异常处理都是安全的
- 尽量避免使用前台传递过来的、未经后台校验的关键参数
- 所有认证相关的操作都要记录日志
在本文的完整版里会结合一些实例进行更具体的介绍。
收藏
举报
TAG: