7

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

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

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

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

非常感谢!

安东尼

4

5 回答 5

4

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

至于另一点,SQL Server 2005 支持开箱即用的表级加密。这是一篇关于它的文章。您可以创建一个链接到员工的 SALARY 表并保持该表加密。

于 2008-09-29T14:41:08.450 回答
3

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

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

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

于 2008-09-29T14:50:49.113 回答
2

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

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

于 2008-09-29T14:44:01.297 回答
2

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

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

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

于 2008-09-29T14:45:46.487 回答
2

您肯定想使用 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 一起)进行加密。

于 2008-09-29T14:47:06.483 回答