【发布时间】:2014-05-29 06:39:33
【问题描述】:
我想知道人们认为保护网站管理部分的最佳做法是什么,特别是从身份验证/访问的角度来看。
当然有一些显而易见的事情,例如使用 SSL 和记录所有访问,但我想知道在这些基本步骤之上人们认为应该设置什么标准。
例如:
- 您是否仅仅依赖于与普通用户相同的身份验证机制?如果不是,那是什么?
- 您是否在同一个“应用程序域”中运行管理部分?
- 您采取了哪些步骤来使管理部分不被发现? (或者你是否拒绝整个“默默无闻”的事情)
到目前为止,回答者的建议包括:
- 在每个管理员密码检查中引入人工服务器端暂停,以防止暴力攻击[开发人员艺术]
- 使用相同的 DB 表为用户和管理员使用单独的登录页面(以阻止 XSRF 和会话窃取授予对管理区域的访问权限)[Thief Master]
- 考虑将网络服务器本机身份验证添加到管理区域(例如通过 .htaccess)[Thief Master]
- 考虑在多次失败的管理员登录尝试后阻止用户 IP [Thief Master]
- 在管理员登录尝试失败后添加验证码[Thief Master]
- 为用户和管理员提供同样强大的机制(使用上述技术)(例如,不要特别对待管理员)[Lo'oris]
- 考虑二级身份验证(例如客户端证书、智能卡、卡空间等)[JoeGeeky]
- 仅允许来自受信任的 IP/域的访问,如果可能,将检查添加到基本 HTTP 管道(通过例如 HttpModules)。 [JoeGeeky]
- [ASP.NET] 锁定 IPrincipal 和 Principal(使它们不可变且不可枚举)[JoeGeeky]
- 联邦权限提升 - 例如当任何管理员的权限升级时,向其他管理员发送电子邮件。 [JoeGeeky]
- 考虑管理员的细粒度权限 - 例如而不是基于角色的权限,为每个管理员定义个人操作的权限[JoeGeeky]
- 限制创建管理员 - 例如管理员不能更改或创建其他管理员帐户。为此,请使用锁定的“超级管理员”客户端。 [JoeGeeky]
- 考虑客户端 SSL 证书,或 RSA 类型密钥卡(电子令牌)[Daniel Papasian]
- 如果使用 cookie 进行身份验证,请为管理页面和普通页面使用单独的 cookie,例如将管理部分放在不同的域上。 [丹尼尔·帕帕西恩]
- 如果可行,请考虑将管理站点保留在私有子网上,远离公共 Internet。 [约翰·哈特索克]
- 在网站的管理员/正常使用上下文之间移动时重新签发身份验证/会话票证[Richard JP Le Guen]
【问题讨论】:
-
只是一个想法。保护管理部分的最佳方法可能是不要将它放在公共互联网上。您可以选择仅将管理站点保留在私有子网上。
-
您指定的以下哪些想法不适用于所有用户,而不仅仅是管理员?
-
您可能想查看webloginproject.com 的 WebLoginProject,它是一个协作登录系统,旨在防止 XSS、SQL 注入、会话固定和 CSRF 漏洞的安全。它有 ASP 和 PHP 的源代码,它是多语言的,而且看起来很酷。许多开发人员正在努力修复漏洞,所以这可能是尽可能接近安全的。
-
-1 包含非常错误的“强密码”(实际上是一个非常弱密码)建议
-
@Lohoris - 我真的不明白你为什么不赞成这个问题。您是否因为我总结了您不同意的某人的建议而投反对票?也许对相关答案投反对票会更具建设性。 :/ 你能具体说明你有什么问题吗?