假设有一个多用户 Web 应用程序需要访问用户的邮箱(在第三方服务上,如 gmail 等)。这种访问需要是持久的。这意味着我们必须存储用户密码。这造成了一个漏洞点——如果有人获得了对此类系统的访问权限,他可以窃取大量用户的邮箱。有没有办法降低这种设置的风险?例如,对于某些网站,OAuth 可以降低风险,因为令牌需要消费者密钥,可以受到限制,并且如果发生不好的事情很容易大量过期。但是这一切都不适用于邮件服务器。那么,关于以更安全的方式存储此类信息的好方法(如果有的话)有什么建议吗?
安全地存储第三方身份验证信息
信息安全
应用安全
Web应用程序
密码
验证
联邦
2021-08-15 12:09:50
2个回答
经验表明,如果这样的网站在公共互联网上并且足够流行,它就会成为一个大目标,并且很有可能造成灾难性的妥协。请注意这个广泛讨论中的回应(关于一个稍微不同的目标):
如果您选择继续,请确保警告您的用户非常真实的风险。深度防御是强制性的 - 将实际的密码存储机器远离网络,通过防火墙使用非常简单的界面进行访问,建立在您能找到的最安全的平台上,具有大量的强化和监控,良好的 IDS 等等等。
正如你所说,这是一个潜在的弱点。但是如何修复它与应用程序的实现方式有很大关系。例如,如果在容器中作为 java 应用程序运行,则可以在应用程序启动后将令牌写入应用程序的堆中。从那里很难读回而不进入java的内存空间。例如,对于 PHP 类型的平台,这不是一种可行的方法,可能最好的解决方案是在网络服务器启动时使用环境变量集。诚然,对于维护数千个潜在用户的 POP 密码而不是说单个数据库密码来说,这是一个更复杂的提议——但原理是相同的。至于共享平台......那么它真的必须进入文件系统(另见 suphp 和 open_basedir for php)。
但是,如果您要求用户提供密码,大多数这种复杂情况都会消失。保护会话数据不被窥探比系统范围的设置更容易 - 尽管这里仍然存在潜在问题。如果您需要独立于第三方设施对用户进行身份验证,或者您连接到多个第三方,那么您可以使用用户的密码作为存储用户令牌数据库的加密密钥的一部分。
但是,您不是在询问如何保护这样的平台,而是在询问如何降低风险。但是,如果您不控制第三方身份验证机制,那么除了简单的用户名/密码之外,您别无选择。
因此,除了在前端确保上帝的安全性之外,您唯一的其他选择是使用蜜罐来增加您的数据 - 然后如果您看到对蜜罐的任何访问,那么您就知道您可能已经妥协。
其它你可能感兴趣的问题