我有一个在经典 MERN 堆栈(MongoDB、Express、React、Node)中构建的 Web 应用程序,我想创建一个管理路由,所以我想我可以用[url]/admin
路由来完成。
这可能是安全风险吗?当然,管理员用户会被提示某种形式的身份验证,但是将管理面板作为公共路由,这是一种不好的做法吗?
我有一个在经典 MERN 堆栈(MongoDB、Express、React、Node)中构建的 Web 应用程序,我想创建一个管理路由,所以我想我可以用[url]/admin
路由来完成。
这可能是安全风险吗?当然,管理员用户会被提示某种形式的身份验证,但是将管理面板作为公共路由,这是一种不好的做法吗?
使用已知的管理员 URL 不是安全漏洞。应该保密的是管理凭证,而不是 URL。这就像隐藏一扇门,而实际上它是您应该保持安全的钥匙。
您可以使用人工警卫、外围围栏、额外安全锁、坚固的墙壁等更好地保护门。这不应该给您一种错误的安全感:锁应该仍然安全,只允许授权人员进入,但是这些措施可以帮助。
将它们转换为数字世界,您可以将管理面板放在 IP 地址白名单后面(检查身份证的守卫),具有多因素身份验证(额外的安全锁),只允许通过内部管理网络接口(围栏)进行连接, 等等。
它稍微帮助不具有已知/预测的URL,但这是常见的应用主要是有用的。如果那里有一万个 WordPress 网站并且发现了安全问题,那么黑客组织所做的第一件事就是将黑客尝试发送到尽可能多的/wp-admin
页面(标准 WordPress 管理 URL)。如果您将 URL 更改为,/wp-admin5839
那么您的网站将不会在第一波中受到无针对性的攻击。然而,如果有人打算专门入侵您的网站,那么他们很可能已经花时间猜测您的管理页面或设法以其他方式找出它,一旦安全问题变得已知,他们只会在您之前的隐藏页面上使用它你有机会修补。所以它没有多大帮助,但在某些特定情况下确实有一点帮助。
这取决于您的应用程序的用例。如果它在组织内,您可以将管理面板限制为仅响应来自特定源 IP 的请求。您还可以使用基于证书的身份验证,它比传统的基于密码的身份验证更安全。
如果您编写一些“通用”软件,例如 Wordpress,您需要确保您的软件适用于从个人到大型组织的绝大多数客户。因此,很难对客户的基础设施做出假设。
一般来说,它本身并不是一个真正的漏洞,但除非你必须这样做,否则暴露它是一种不必要的风险。
更改到管理页面的路径可能会为自动机器人和脚本小子提供边际防御,因为他们的目录单词列表中可能没有例如“/mysupercustomapp-admin/”。对我来说,这似乎类似于将 SSH 端口从默认值 22 更改的概念,以便自动扫描和随机蛮力尝试错过它。
但是,除此之外,如果您真的依赖隐藏的管理页面作为保护,我几乎会说这是“通过默默无闻的安全”。除非它是一个非常长且难以键入的 URI 路径(可用性差),否则一个坚定的攻击者将能够通过自动或手动方式找到它。
相反,您应该专注于总体上保护您的身份验证。强制实施适当的密码强度,考虑验证码和/或速率限制身份验证尝试,可能需要客户端证书(如果适用),实施 2FA,仅对受信任/内部 IP 地址的管理页面的访问,并考虑帐户锁定或临时禁令(允许DoS 作为一种权衡)。
TL;DR:如果作为深度防御解决方案的一部分,非标准管理页面路径可能会有好处,但绝不应该依赖它。
不要将管理员路由放入面向公众的应用程序中。我看到的黑客试图点击管理员 URL 的日志数量令人难以置信。
最好的选择是让您的管理员在一个不起眼的 URL 和单独的硬件上使用第二个应用程序。使用 SSL/TLS 保护管理应用程序,并使用 2FA 或 SSL 证书进行身份验证和加密。
这具有简化您的应用程序(微服务)并使它们更具弹性的额外优势。