2014-01-24 76 views
5

我有一個應用程序部署在流行的網絡託管服務。因爲他們對他們的機器擁有管理員權限,所以我覺得我有必要保護所有層的數據,包括數據庫本身。如何從內部保護系統(如內部工作)?

在數據庫中,我正在考慮對用戶名和電子郵件等敏感信息進行加密,可能是他們的電話號碼等。存儲庫層將處理所有編碼/解碼要求。我有三個DLL:1)應用層(控制器和視圖),2)業務層(服務邏輯)和3)數據層(存儲庫)。

通常情況下,外部的用戶會請求一個頁面,如果他們還沒有通過身份驗證,他們將被重定向到登錄頁面,典型的表單身份驗證的東西。這可以保護系統免受外部非特權用戶的侵害。

但是,在內部,從技術上講,可以將這些DLL導入到任何.NET應用程序中。在這種情況下,應用程序可以隨時訪問系統的內部工作。

+2

如果你不能相信管理員訪問你的代碼/數據的機器的人是,這是一個人的問題,而不是技術問題。 –

+0

不要把你的時間投入到失敗的戰鬥中。根據你在.net中開發的標籤,即使你將在你的二進制文件上使用一些昂貴的模糊處理程序,它也只會爲潛在的atharder _harder_做些事情。所以繼續前進,考慮你的_user's_安全性,而不是二進制文件。 – Tigran

+0

如果您出於成本原因使用共享主機,則您的數據尚不足以受到大力保護。沒做什麼。 – usr

回答

9

如果數據託管在其他人擁有管理員訪問權限的計算機上,則最終無法保護您的數據並仍然可以訪問該數據。您使用的任何加密都將依賴一個祕密,但您必須將該祕密存儲在該盒子上,此時盒子的所有者才能訪問該祕密。

這可以工作的唯一方法是,如果您的用戶在上傳之前在本地加密了他們的數據,然後您的服務器將相同的加密數據提供給他們。但在那個時候,你將無法在服務器端對這些數據做任何事情。

你需要看看服務器提供商的策略上,他們用數據做什麼你存儲在自己的服務器上,並問:

  1. 難道他們保證不看數據?
  2. 你相信他們遵循這一政策嗎?
  3. 你相信他們有能力保證他們的服務器免受入侵嗎?
  4. 由於法律原因,他們是否將自己的數據放棄給其他人?例如,各國政府可以讓公司披露數據。

然後,您可以衡量的風險,並作出決定:

  1. 您滿意的風險和仍然要存儲的敏感數據和他們在一起。
  2. 無論你的用戶會對風險感到滿意 - 你需要清楚地告知你自己的隱私政策和風險,以便他們做出明智的選擇。

此外,請考慮是否需要存儲所有信息。你爲什麼需要電話號碼?如果是處理付款,您可以將所有這些交給可信任的第三方,例如Visa或Paypal。然後他們可以安全地存儲用戶的數據,而不必處理風險。

+1

對客戶機器上的數據進行加密時,必須充分關注內存數據。正在運行的程序下面的虛擬機可以隨時將虛擬內存換出磁盤。如果偶爾在某個字符串中存在密碼,它會被刻在物理媒體上。在互聯網咖啡中,下一位客戶將能夠在外部驅動器上存儲所有未寫入的行業,並將其帶回家,以便按照自己的條件進行日後分析。這就是多少客戶端加密被濫用(如登錄到您最喜愛的MMO)。另一方面的瀏覽器保護密碼字段的內容。 – pid

+0

是的,對不起,當我在談論客戶端加密時,我假設客戶端在客戶端控制/信任一臺機器,如個人計算機或移動設備。顯然,如果客戶也在別人擁有的機器上,那麼您剛剛將問題轉移到其他地方。 –

1

一個好的做法是不對數據庫中的密碼進行加密和存儲。您應該使用隨機鹽(使用加密的RandomNumberGenerator類,而不是數學的Random類)對彩虹表進行散列並僅存儲散列和鹽。無論誰拿到那張桌子,都很難冒充合法用戶。如果您不信任DBA,甚至不會考慮存儲信用卡信息。一些網絡服務允許付款,而不必知道任何明智的憑據,如PayPal重定向等。其他敏感數據(電子郵件)應該使用其他用戶級別的數據進行加密,如用戶名和常量鹽,如下所示:「[email protected]+username+AayRUIOH283uID」。

所有這些都只是微小的事情,讓你的生活變得非常困難,但也是不信任的管理員的生活。還要考慮只接受來自您自己的雲集羣(可信IP表)的Intranet連接,甚至在您自己的節點之間使用SSL,並使用非對稱密鑰簽署程序集文件,以便無法替換DLL。

儘管如此,所有這些對於可疑的安全優勢來說都是一筆巨大的時間和精力。與所有方面一樣,安全性不是系統的特徵,而是成本/收益的折衷。

最好的選擇是避開不祥的選擇,找到替代風險較小的解決方案(如而不是存儲密碼)。請記住,有些工具可以篡改二進制文件(DLL),檢查發佈的MSIML代碼(即使在沒有調試符號表的情況下也可以像C#一樣編譯.NET),還可以在應用程序運行時篡改內存。有一些技術可以使內存篡改的成本非常高,比如不在字符串中存儲敏感數據(如密碼),但是每次只能在固定內存位置以單個字符流式傳輸它們,並且每次都重寫相同的字符,將哈希就地重新組合「隨時」使用增量散列算法(SHA-256會很好)。

但是,當管理員不信任時,您無法真正保護自己免受各種攻擊。他總是能夠關閉你的機器並將其帶回家,在他的地下室裏享受一些快樂時光...