我想知道人们在保护网站管理部分方面,特别是从身份验证/访问角度考虑时,认为最佳做法是什么。
当然有一些明显的事情,比如使用SSL和记录所有访问,但我想知道人们认为除了这些基本步骤之外还要采取哪些措施。
例如:
- 您是否只依赖于与普通用户相同的身份验证机制?如果不是,是什么?
- 您是否在同一个“应用程序域”中运行管理员部分?
- 您采取什么措施使管理部分难以发现?(或者您拒绝整个“模糊性”问题)
到目前为止,回答者的建议包括:
- 在每个管理员密码检查中引入人工服务器端暂停,以防止暴力攻击 [Developer Art]
- 使用单独的登录页面为用户和管理员,使用相同的DB表格(以防止XSRF和会话窃取授予访问管理员区域) [Thief Master]
- 考虑在管理区域中添加Web服务器本地身份验证(例如通过.htaccess) [Thief Master]
- 考虑在管理员登录尝试失败后阻止用户IP [Thief Master]
- 在管理员登录尝试失败后添加验证码 [Thief Master]
- 为用户和管理员提供同样强大的机制(使用上述技术),例如不要特别对待管理员 [Lo'oris]
- 考虑第二级身份验证(例如客户端证书,智能卡,卡片空间等) [JoeGeeky]
- 仅允许来自可信IP /域名的访问,如果可能,请在基本HTTP管道中添加检查(例如通过HttpModules) [JoeGeeky]
- [ASP.NET]锁定IPrincipal& Principal(使其不可变且不可枚举) [JoeGeeky]
- 联合权限提升-例如电子邮件其他管理员,当任何管理员的权限得到升级时。
- 考虑为管理员设置细粒度权限,例如,不基于角色的权限,而是为每个管理员定义单独的操作权限。
- 限制创建管理员账户,例如,管理员不能更改或创建其他管理员账户。使用受限的“超级管理员”客户端进行此操作。
- 考虑使用客户端端SSL证书或RSA类型的电子令牌(电子口令)。
- 如果使用cookies进行认证,请为管理员和普通页面使用单独的cookies,例如将管理员部分放在不同的域名下。
- 如果可行,考虑将管理员站点保持在私有子网上,远离公共互联网。
- 当移动网站的使用场景从管理员切换到正常用户时,重新发布授权/会话票据。