如何存储密码以备后用?

Posted

技术标签:

【中文标题】如何存储密码以备后用?【英文标题】:How to store a password for later use? 【发布时间】:2015-11-02 15:03:38 【问题描述】:

我需要能够存储用户的 Exchange 密码,以便稍后使用 EWS 执行某些任务。我知道以纯文本形式存储密码是一种可怕的犯罪行为,那么我有什么选择呢?

就我而言,我的应用程序将有权访问一个管理帐户,该帐户将能够使用模拟来处理用户的日历。我需要存储此管理员帐户的密码,以便以后在与 Exchange 服务器进行身份验证时使用它。我不打算使用 EWS 托管 API。

【问题讨论】:

【参考方案1】:

我有一个用户创建了一个具有类似要求的日历应用程序。默认情况下,全局拥有这些权限的帐户非常糟糕,不推荐使用。模拟角色由需要访问应用程序以降低风险范围的部门授予。但是,如果您在全球范围内需要此功能,我建议您这样做以减少帐户/密码泄露:

    将帐户功能仅限于 Exchange 服务。仅需要邮箱访问和模拟角色的 EWS 服务帐户不需要本地登录和其他一般域用户权限等功能。在这种情况下,该帐户无法登录计算机,也无法用于 RDP。这限制了恶意使用的风险。

    用户/密码可以存储在您的应用程序数据库中,连接字符串也可以存储在您的应用程序之外,这里有很多:https://security.stackexchange.com/questions/22817/how-to-encrypt-database-connection-credentials-on-a-web-server 并在数据库中加密密码;延伸阅读:http://www.darkreading.com/safely-storing-user-passwords-hashing-vs-encrypting/a/d-id/1269374

    限制数据库服务器和管理访问。如果数据库服务器在组之间共享,这是一个更大的问题。审核数据库服务器访问,如果厨房里有太多厨师,请重新限制。数据库服务器也不应该被用户网络直接访问,但这可能是一个需要解决的更大问题。

    限制对应用程序的访问。例如,它是在外部可用还是仅在您的周边可用?无论哪种方式,应用程序还应包括仅用于访问的身份验证,使用 Kerberos 或其他一些 SSL 身份验证,确保应用程序不能用于 DoS 过度访问的 EWS 服务。

    为此用户在 Exchange 上创建一次性限制策略并进行相应分配,以防止应用程序破坏 EWS 或限制常规用户功能。如果不遵循建议,黑莓管理员就很难学到这一点。当 BES 服务器无法正确断开连接时,Web 服务将开始丢弃有效的客户端请求。因此,BES 必须指示用户为各种 Exchange 功能创建一次性限制策略。我为创建我的 EWS 应用程序的用户做了同样的事情。有几次它救了我。

实际上,这将归结为良好的应用程序设计和与 Exchange 团队的协调要求。

不要:

    不要将用户名/密码存储在 Apache/IIS 页面或连接字符串中 如果没有必要,请不要为帐户授予全局权限 不允许未经身份验证的应用程序访问并允许无限连接时间

希望这会有所帮助。

【讨论】:

以上是关于如何存储密码以备后用?的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库循环中获取值并将它们相加以备后用

如何将两个文件合二为一以备后用

闪烁词法分析器帮助。试图保存特定的线路信息以备后用

密码存储在内存中是不是安全?

UIWebview 获取选定文本的范围并保存以备后用

使用 activemerchant 保存付款以备后用