我想知道人们认为保护网站管理员部分的最佳做法,特别是从身份验证/访问角度来看。
当然有明显的事情,比如使用SSL和记录所有访问权限,但我想知道上面这些基本步骤的位置,人们会考虑设置这个栏。
例如:
到目前为止,来自回答者的建议包括:
如果网站需要登录常规活动和管理员,例如论坛,我会使用使用相同用户数据库的单独登录。 这可确保XSRF和会话窃取不允许攻击者访问管理区域。
此外,如果admin部分位于单独的子目录中,使用Web服务器的身份验证(例如Apache中的.htaccess)保护该部分可能是个好主意 - 那么有人需要该密码和用户密码。
模糊管理路径几乎不会产生任何安全性 - 如果有人知道有效的登录数据,他很可能也能找到管理工具的路径,因为他要么是通过网络钓鱼,要么是通过社交工程来获取它(这可能会揭示出来道路,也)。
蛮力保护,例如在3次登录失败后阻止用户的IP或在登录失败后需要CAPTCHA(不是第一次登录,因为这对于合法用户来说非常烦人)也可能有用。
我没有注意到有人提到管理员密码的存储/验证。 请不要以纯文本形式存储PW,最好甚至不能反转的东西 - 使用像盐渍 MD5哈希这样的东西,以便至少如果有人碰巧检索存储的“密码”他们没有任何非常有用的东西,除非他们也有你的盐计划。
添加密码字段和管理员将知道的安全问题,例如您的第一个女朋友姓名,或者每次查看管理面板时随机化问题。
也许您总是可以将管理部分放在一个大目录中,例如
但那不是很好啊。
也许您可以在主页中包含查询字符串,例如:
如果是,将显示用户名和密码字段。
这些都是很好的答案......我通常喜欢为我的管理部分添加一些额外的图层。 虽然我在主题上使用了一些变体,但它们通常包含以下内容之一:
是的,在写完之后,我意识到这个答案可以概括为“管理员登录没有什么特别之处,它们都是应该用于任何登录的安全功能”。
如果对具有普通用户权限和管理员权限的用户仅使用一次登录,则在级别发生更改时重新生成其会话标识符(无论是在cookie还是GET参数中等等)。特权......至少。
因此,如果我登录,请执行一些普通用户的操作,然后访问管理页面,重新生成我的会话ID。 如果我然后从管理页面导航到普通用户页面,请再次重新生成我的ID。
有一个很好的管理员密码。
不是"123456"
而是一系列字母,数字和特殊字符,足够长,例如15-20个字符。 比如"ksd83,'|4d#rrpp0%27&lq(go43$sd{3>"
。
为每次密码检查添加暂停以防止暴力攻击。
以下是一些需要考虑的事项:
我们使用Windows Authentication
进行管理访问。 这是保护管理区域的最实用方法,同时保持认证与适用于一般最终用户的认证分开。 系统管理员管理管理员用户访问凭据并对域用户帐户强制实施密码策略。
严格的方法是拥有两个完全不同的“农场”,包括数据库,服务器和所有,并将数据从一个农场移动到另一个农场。 大多数现代化的大型系统都使用这种方法(Vignette,SharePoint等)。 它通常被称为具有不同阶段的“编辑阶段” - >“预览阶段” - >“交付阶段”。 此方法允许您以与处理代码相同的方式处理内容/配置(dev-> qa-> prod)。
如果你不那么偏执,你可以拥有一个数据库,但只能在“编辑”服务器上使用你的管理部分。 我的意思是,只有编辑脚本/文件放在编辑服务器上。
当然,编辑阶段应仅在本地Intranet和/或VPN上可用。
这可能看起来有点过分,可能不是所有使用案例的最简单的解决方案,但它绝对是最强大的做事方式。
请注意,像“拥有强大的管理员密码”这样的东西很不错,但仍然可以让您的管理员对所有种类的智能行为开放。
这在很大程度上取决于您要保护的数据类型(法律要求等)。
很多建议都是关于身份验证的。我认为你应该考虑使用OpenId / Facebook身份验证作为登录。 (他们很可能会花更多的资源用于身份验证安全性)
保存更改以及更新数据库中的值。 这样,您可以回滚用户X或日期X和Y之间的更改。