【问题标题】:Encrypting Salary value in ASP .NET 2.0 and SQL Server 2005在 ASP .NET 2.0 和 SQL Server 2005 中加密工资值
【发布时间】:2010-09-14 00:28:44
【问题描述】:

我有一个连接到 SQL Server 2005 数据库的 ASP .NET 2.0 网站。该网站非常简单,并存储有关员工的信息,包括薪水。

加密工资值的最佳方法是什么,这样除了使用网络应用程序的授权员工之外,没有人(包括我自己)可以看到它是什么?

我不想在 SQL Server 上加密/解密,因为我可以运行 SQL Profiler 来查看信息,所以我假设加密/解密发生在 Web 服务器上的 BLL 中?

另外,我是否需要 SSL 来阻止有人在浏览器和 Web 服务器之间嗅探 HTTP 响应?

非常感谢!

安东尼

【问题讨论】:

    标签: asp.net sql-server encryption


    【解决方案1】:

    SSL 可能是防止他人嗅探的最佳选择,但请注意,它仍然是可能的。

    另一方面,SQL Server 2005 支持开箱即用的表级加密。 Here's an article on it。您可以创建一个链接到员工的 SALARY 表并对该表进行加密。

    【讨论】:

      【解决方案2】:

      webapp 的开发人员仍然可以访问工资数据——这完全取决于信任。为了解决这个问题,您可以切换到在客户端进行加密/解密的模型,但这更加麻烦并且仍然不是 100% 安全的。安全性始终是与便利性的权衡。

      您应该使用 TLS/SSL(即 HTTPS),以便更难窃听 HTTP 流量。

      您可能会考虑的一种攻击是将您自己的加密工资数字替换为您感兴趣的人的数字,然后致电会计部门并询问您当前的工资数字是多少。消除攻击的一种方法是让加密的薪水字段的内容引用它所属的人。

      【讨论】:

        【解决方案3】:

        您可以在代码中使用多种加密方法。确保您选择一个带有钥匙和“盐”的钥匙(而不是每次都使用相同的钥匙)。如果每次加密工资时使用相同的密钥(不加盐),那么两个工资相同的员工在数据库中会显示相同的加密值,从而损害工资信息的安全性。

        您可以使用每个员工的唯一 ID 作为盐。

        【讨论】:

        • 加密方式不用加盐...加盐就可以了。
        • 另外,很容易找出的盐就像没有盐一样。盐有助于减缓彩虹桌蛮力攻击,但只是轻微的。如果有足够的并行能力,如果有人愿意,大多数加密技术都可以被暴力破解。
        • 一切都是为了让它不值得付出努力。
        • 我不认为实际的加密方法与此处相关。这家伙不会转储内存或使用 hexedit 读取数据库。一切都是为了权利。
        【解决方案4】:

        您肯定需要 SSL 来防止嗅探敏感的网络流量(更不用说登录),但这并不能解决您的服务器端加密问题。

        让作为开发人员的您无法访问数据是一个难以破解的难题。为了让它真正起作用,所有的加密/解密只需要在你无权访问的机器上完成。从理论上讲,您必须制作某种浏览器扩展程序来解密客户端计算机上的工资数据。您的雇主必须足够信任您,以免在客户端代码中设置后门(或至少让代码审计的可能性超过您的头脑)。

        在大多数情况下,更容易相信开发人员不会泄露数据。将其保持在需要知道的基础上是个好主意,但最终有些人需要知道。 (例如,会计人员总是看到工资数据。)

        【讨论】:

          【解决方案5】:

          您肯定希望使用 SSL 来确保运输安全。您还可以为 Web 服务器和数据库服务器之间的传输设置 IPSec。

          关于数据库中的安全,SQL Server 2005 有几个加密功能:

          1) EncryptByAsymKey - http://msdn.microsoft.com/en-us/library/ms186950.aspx
          2) EncryptByKey - http://msdn.microsoft.com/en-us/library/ms174361.aspx
          3) EncryptByPassPhrase - http://msdn.microsoft.com/en-us/library/ms190357.aspx
          4) EncryptByCert - http://msdn.microsoft.com/en-us/library/ms188061.aspx

          显然,所有这些都具有相关的解密功能。​​

          您可以将密钥或您选择的任何内容存储在 Web 服务器上(在 machine.config 或 web.config 或某处),然后将其传递给您的存储过程(或以某种方式与您的 sql 一起)进行加密。

          【讨论】:

            猜你喜欢
            • 2011-01-10
            • 2013-09-22
            • 1970-01-01
            • 2011-02-19
            • 1970-01-01
            • 1970-01-01
            • 2011-04-12
            • 2010-09-14
            • 2010-09-08
            相关资源
            最近更新 更多