保护网站管理部分的最佳做法是什么?

我想知道人们认为保护网站管理员部分的最佳做法,特别是从身份验证/访问的角度来看。

当然,还有很多显而易见的事情,例如使用SSL和记录所有访问,但是我想知道人们认为在这些基本步骤之上的哪些位置会被设置。

例如:

  • 您是否仅仅依靠您用于普通用户的相同身份验证机制? 如果不是,什么?
  • 你是否在同一个'应用程序域'中运行管理部分?
  • 您采取了哪些步骤来使管理部分未被发现? (或者你拒绝整个'默默无闻'的事情)

  • 到目前为止,来自回答者的建议包括:

  • 在每个管理员密码检查中引入仿真服务器端暂停以防止暴力攻击[开发人员艺术]
  • 使用单独的登录页面为用户和管理员使用相同的数据库表(阻止XSRF和会话窃取授予访问管理区域)[贼大师]
  • 考虑将webserver本地身份验证添加到管理区域(例如通过.htaccess)[Thief Master]
  • 考虑在多次失败的管理员登录尝试后阻止用户IP [大师]
  • 失败的管理员登录尝试后添加验证码[贼大师]
  • 为用户和管理员提供同样强大的机制(使用上述技术)(例如,不要专门对待管理员)[Lo'oris]
  • 考虑二级认证(例如客户端证书,智能卡,纸牌空间等)[JoeGeeky]
  • 只允许从受信任的IP /域访问,如果可能的话,将检查添加到基本HTTP管道(通过例如HttpModules)。 [JoeGeeky]
  • [ASP.NET]锁定IPrincipal&Principal(使它们不可变且不可枚举)[JoeGeeky]
  • 联合权限提升 - 例如在任何管理员权限升级时向其他管理员发送电子邮件。 [JoeGeeky]
  • 考虑管理员的细粒度权限 - 例如,而不是基于角色的权限,为每个管理员的个别操作定义权限[JoeGeeky]
  • 限制创建管理员 - 例如管理员不能更改或创建其他管理员帐户。 为此,请使用锁定的“superadmin”客户端。 [JoeGeeky]
  • 考虑客户端SSL证书或RSA类型密钥(电子令牌)[Daniel Papasian]
  • 如果使用Cookie进行身份验证,则可以对管理员和常规页面使用单独的Cookie,例如将管理员部分放在其他域中。 [Daniel Papasian]
  • 如果可行,请考虑将管理站点保留在私有子网上,离开公共互联网。 [John Hartsock]
  • 当在网站的管理员/正常使用情境之间移动时重新发布授权/会话票证[Richard JP Le Guen]

  • 这些都是很好的答案...我通常喜欢为我的管理部分添加几个额外的图层。 虽然我在主题上使用了一些变体,但它们通常包含以下内容之一:

  • 二级认证 :这可能包括客户证书(例如x509证书),智能卡,纸牌空间等等。
  • 域/ IP限制 :在这种情况下,只有来自可信/可验证域的客户; 如内部子网; 被允许进入管理区域。 远程管理员通常会经过可信的VPN入口点,因此他们的会话可以验证,并且通常也使用RSA密钥进行保护。 如果您使用的是ASP.NET,那么您可以通过HTTP模块轻松地在HTTP管道中执行这些检查,从而防止您的应用程序在安全检查不满意时收到任何请求。
  • 锁定IPrincipal&Principal-based Authorization :创建定制原则是一种常见的做法,尽管常见的错误是让它们可修改和/或权利可枚举。 虽然它不仅仅是一个管理问题,但更重要的是,用户可能会提高权限。 确保它们是不可变的,而不是可枚举的。 此外,请确保所有授权评估均基于委托人。
  • 联邦权利提升 :当任何账户收到选定数量的权利时,所有管理员和安全官员将立即通过电子邮件通知。 这确保了如果攻击者提升我们立即知道的权利。 这些权利通常围绕特权,看到隐私保护信息的权利和/或财务信息(例如信用卡)。
  • 谨慎发布权限,甚至对管理员也是如此 :最后,对于某些商店来说,这可能会更先进一些。 授权权利应尽可能谨慎,并应围绕真实的功能行为。 典型的基于角色的安全(RBS)方法往往具有团队心态。 从安全角度来看,这不是最好的模式。 而不是像'用户经理'这样的组织,尝试进一步分解(例如创建用户,授权用户,提升/撤销访问权限等)。 这在管理方面可能会有一些额外的开销,但是这使您可以灵活地分配更大的管理员组实际需要的权限。 如果访问受到威胁,至少他们可能无法获得所有权利。 我喜欢用.NET和Java支持的代码访问安全(CAS)权限来封装它,但这超出了本答案的范围。 还有一件事...在一个应用程序中,管理员无法管理更改其他管理员帐户,或使用户成为管理员。 这只能通过一个只有几个人可以访问的锁定客户端来完成。

  • 如果网站需要登录常规活动和管理员,例如论坛,我会使用单独的登录使用相同的用户数据库。 这确保了XSRF和会话窃取不会允许攻击者访问管理区域。

    另外,如果管理部分位于单独的子目录中,那么使用Web服务器的身份验证(例如,Apache中的.htaccess)来保护该用户可能是个好主意 - 那么有人需要密码和用户密码。

    模糊管理路径几乎不会产生任何安全性收益 - 如果有人知道有效的登录数据,他很可能会找到管理工具的路径,因为他既可以通过它进行钓鱼或键盘记录,也可以通过社交工程获得它(这可能会揭示路径也是如此)。

    暴力保护措施,例如3次登录失败后阻止用户的IP,或者在登录失败后不需要第一次登录(因为这对于合法用户来说非常烦人)也可能是有用的。


  • 我拒绝默默无闻
  • 使用两个认证系统而不是一个是矫枉过正的
  • 尝试之间的人工暂停也应该为用户完成
  • 阻止尝试失败的IP也应该为用户完成
  • 用户也应该使用强密码
  • 如果您考虑验证码,请猜猜看,您也可以将它们用于用户
  • 是的,在写完之后,我意识到这个答案可以概括为“对管理员登录没什么特别之处,它们都是应该用于任何登录的安全功能”。

    链接地址: http://www.djcxy.com/p/3691.html

    上一篇: What are best practices for securing the admin section of a website?

    下一篇: Preventing Brute Force Logins on Websites