2008-09-29 94 views
7

我有一個連接到SQL Server 2005數據庫的ASP .NET 2.0網站。該網站非常簡單,存儲有關員工的信息,包括薪水。加密ASP .NET 2.0和SQL Server 2005中的工資值

加密工資值的最佳方式是什麼?除了授權人員使用網絡應用之外,沒有人(包括我自己)能看到它是什麼?

我不想在SQL Server上加密/解密,因爲我只能運行SQL Profiler查看信息,所以我假設加密/解密發生在Web服務器上的BLL中?

另外,我是否需要SSL來阻止某人嗅探瀏覽器和Web服務器之間的HTTP響應?

非常感謝!

安東尼

回答

4

SSL可能是防止他人竊聽,但是要注意,它仍然有可能你最好的選擇。

至於另一位,SQL Server 2005支持開箱即用的表級加密。 Here's an article on it。您可以創建一個鏈接到員工的SALARY表,並將該表加密。

2

您可以在代碼中使用許多加密方法。確保你選擇了一個採用密鑰和「鹽」(而不是每次只使用相同的密鑰)。如果每次加密工資時都使用相同的密鑰(沒有鹽),那麼兩個薪金相同的員工將在數據庫中顯示相同的加密值,這會影響薪資信息的安全性。

您可以將每個員工的唯一ID用作鹽。

+0

加密方法不必採取鹽...鹽可以被添加到數據。 – 2008-09-29 14:49:35

2

您絕對需要SSL才能防止敏感網絡流量的嗅探(更不用說登錄),但這並不能解決您的服務器端加密問題。

爲了讓您無法像開發人員那樣訪問數據,這是一件難事。爲了真正起作用,所有的加密/解密只需要在你無法訪問的機器上完成。理論上你必須製作某種瀏覽器擴展來解密客戶機上的工資數據。你的僱主必須信任你,不要讓後門進入客戶端代碼(或者至少保持代碼審計的可能性)。

在大多數情況下,信任開發人員不容易泄露數據。將它保持在需要知道的基礎上是一個好主意,但最終有些人需要知道。 (例如,會計人員始終看到工資數據。)

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

顯然,所有這些都有一個相關的解密功能。

您可以在網絡服務器上存儲密鑰或任何您選擇的內容(在machine.config或web.config或某處),然後將它傳遞給存儲過程(或者與SQL一起)以進行加密。

3

網絡應用程序的開發人員仍然可以訪問薪水數字 - 這都是信任問題。爲了解決這個問題,你可以切換到客戶端發生加密/解密的模型,但這樣更麻煩,而且仍然不是100%的安全。安全始終是一種便利的折衷。

您應該使用TLS/SSL(即HTTPS),以便竊聽HTTP流量難以執行。

您可能會考慮的攻擊是將您自己加密的薪水數字替換爲您感興趣的人的薪水數字,然後調用會計部門並詢問您目前的薪水數字是多少。抵消攻擊的一種方法是讓加密工資字段的內容引用它所屬的人。