【问题标题】:SQL Server - Storing Sensitive DataSQL Server - 存储敏感数据
【发布时间】:2009-05-12 12:10:32
【问题描述】:

什么是在数据库表中存储用户名和密码(不是 asp.net 成员详细信息)的安全方式,需要将其提取并解密以用于传递给 Web 服务。

我发现问题的每一种方式都发现了安全漏洞,因为用户名和密码在传递给 Web 服务之前需要采用纯文本格式。

【问题讨论】:

    标签: asp.net sql web-services security


    【解决方案1】:

    一些建议:

    用于存储数据

    1. 插入时加密数据(最好调用 CryptoAPI)
    2. 确保在客户端和 SQL Server 之间启用了加密
    3. 如果您使用的是 SQL 2008,请启用 MDF/LDF 文件的加密

    传递给网络服务

    1. 如果您使用的是 .NET,则可以使用 SecureString 将其安全地保存在应用程序的内存中。
    2. 确保 Web 服务使用 SSL 来确保网络安全

    【讨论】:

      【解决方案2】:

      恕我直言,您永远不会解密数据...

      在第一次保存数据之前使用单向加密加密数据,在密码和用户名上使用它。

      当用户登录时,您加密用户名和密码,然后检查加密值在数据库上是否匹配。即你不需要解密。

      因为它的一种加密方式很难解密(有人说它只需要很长时间才能让它值得黑客攻击)这就是为什么是一种方式......

      MS encrypto 类提供 1 路加密。

      希望对你有帮助

      朱尔斯

      【讨论】:

      • 是的,这绝对是我会做的。传递哈希值要安全得多。
      【解决方案3】:

      正如费尔明所说, 您是否可以访问/控制另一端的 Web 服务。

      如果是这样,您应该发送加密的详细信息。但是,即使您发送的用户名和密码对是加密的。有人仍然可以嗅探它们并拥有一对有效的 UN 和 PW。

      HTTPS 在这种情况下会有所帮助。

      没有 100% 安全的方式通过网络发送敏感数据。 这是一个尽力而为的案例。

      【讨论】:

      • 所以理解,由于 web 服务期望 UN 和 PW 是明文,那么在某些时候会有一个安全漏洞,保护数据库中数据的最佳方法是什么以及在哪里/如何做我存储密钥(解密)加密值
      • 我认为,如果您可以用更多背景知识扩展您的原始问题,那将会很有用。正如您现在正在进入应用程序中应该完成加密/解密的位置。谁拥有您要发送到的 Web 服务。第三方?他们可能是在嗅探您的服务器的人吗?更多背景将非常有用
      • 网络服务是由外部公司提供的付费订阅服务(我只能这么说)。 Web 服务 asp.net soap asmx 通过 https 调用,受 ip 限制。当您调用函数时,您以纯文本形式传递函数参数以及用户名和密码。我认为这是如何最好地保护我的系统中的细节的情况。所以我需要在进入我的网站时加密数据,将其保存到加密的数据库中,当我需要解密它并传递给网络服务时。因此,我如何安全地存储我的加密密钥以及使用什么方法
      【解决方案4】:

      T-SQL 支持许多可用于加密数据的cryptographic functions(例如,如果客户端尚未使用存储过程,则通过而不是触发器)。

      在数据库引擎中进行加密应该是最后的手段,最好在链的早期进行。

      几年前MSDN magazine 有一篇文章介绍了这些函数的用法。

      【讨论】:

        【解决方案5】:

        你不能用webservice的方法把它们解密,然后从数据库中传入加密的字符串吗?

        【讨论】:

        • 网络服务由我无法控制的第三方提供,并且在每个函数调用中,您都以纯文本形式传递用户名和密码(网络服务通过 ssl)
        猜你喜欢
        • 1970-01-01
        • 2021-03-27
        • 2017-09-05
        • 2014-05-25
        • 2011-08-15
        • 2020-02-01
        • 2021-04-10
        • 1970-01-01
        相关资源
        最近更新 更多