2013-03-22 113 views
1

我有一個要求,可以安全地存儲一些數據,這些數據可以由授權用戶在網站上檢索。這不是信用卡,但同樣是你不希望有人得到他們的數據。使用PHP安全存儲數據

,將檢索數據的唯一用戶是誰張貼的一個。

所以,我在想東西放在一起類似如下:

  • 一切都運行在SSL
  • 要登錄,用戶將進入他們的用戶名和密碼,還必須上傳「鑰匙」文件 - 用戶將被推薦到只保留密鑰文件的一個副本拇指驅動器或類似
  • 用戶的密鑰將不被物理存儲在服務器上。當用戶提供其鍵登錄,將被存儲在內存中
  • 所有存儲的數據將使用MCRYPT_RIJNDAEL_256進行加密,並使用加密密鑰將是他們必須上傳密鑰文件的一部分(即不是存儲在一個服務器)
  • 當用戶的密鑰被保存在內存中,這也將使用MCRYPT_RIJNDAEL_256使用每天都在變化的密鑰加密
  • 當數據被檢索我們將生成一個新的32字節的IV,所以我們應該得到不同的結果爲兩個獨立的檢索
  • 用戶可以再生時,他們要求他們的關鍵,在這一點所有的存儲數據與他們的新的密鑰
  • 重新加密
  • 用戶可以在其密鑰的內存存儲器中設置超時值 - 例如,要求他們每30分鐘重新提供一次超時值。
  • 用戶還可以在內存中設置一個不活動的超時時間,所以假定他們不執行一個動作(例如)5分鐘,它也將過期密鑰
  • 該框本身將被鎖定只露出端口80和端口22到單個IP(我們的辦公室IP)

我的問題是:

上午我沿着正確的線路在想什麼?上述解決方案是安全的嗎?還是我錯過了一些將使數據變得簡單的攻擊媒介?據我所知,攻擊者需要物理訪問機器(或需要在我們的辦公網絡上),即使情況如此,他們也只能檢索登錄用戶的數據那一刻(因爲他們是唯一可以存儲的密鑰)?我的假設是否正確?

是否有刪除的要求來存儲用戶在內存中的關鍵,而他們在(短,要求他們重新提供他們在每次請求鍵)記錄的方法嗎?我不認爲有,但我希望這是我沒有想到的。

謝謝!

回答

3

這聽起來是一個本地網絡上一點點偏執,但這裏有一些其他的事情要考慮。這些是我自己遇到的一些事情。

  1. 是盒子和物理訪問箱鎖定和監控(安全的房間,安全機架,相機)? 如果交換機與同一個 機架處於「聯機」狀態,則該交換機可以將此物連接到互聯網。也有人可以帶上 無線路由器並將其連接到網絡(將其隱藏在 辦公桌下),這樣您就無法辨別其廣播。 USB路由器 也可用於連接共享。檢查Mac地址。

  2. 如果你問鑰匙你可能想哈希鍵對 第二短語(用戶可能提供類似兩步密碼) 和一個隱藏的短語,只有你知道,如果任何人跑了循環儀在 這件事他們無法得到任何地方。此外,如果他們捕獲了數據包的幾個 ,您不希望他們嘗試解密轉儲。如果 當某人提供了不同的密鑰,並且散列值 失敗,那麼你就哈希了,那麼你就知道他們不是你認爲他們的人。

  3. 這是可能的,如果你發現其中 密鑰交換(在銀行高端路由器這樣做,所以他們 可以加快傳輸),所以,只要通過連接 傳輸可以挖掘的初始握手,打破SSL像Wireshark這樣的東西。如果有訪問 的硬件層?

  4. 如果有訪問 到USB端口(因此端口需要鎖定在物理 機器上),可以在機器上收集捕獲的任何東西。如果你讓他們提供拇指驅動器,那麼也需要檢查 (root工具包,密鑰記錄器等)。也許在運行的thumbdrive上的應用程序上有一個 校驗和。此外, 機器需要檢查其他USB物理驅動器 (可能在機器的背面),某人可能會安裝一個 鍵盤記錄器並等待。

  5. 如果他們可以訪問機器上的CD-ROM,他們可以重新啓動機器和用戶的東西像knoppix?將沒有數字 紙質足跡。

  6. 在瀏覽器中,您可能希望使其保持不記錄。

  7. 所有網頁需要立即過期。

  8. 每次有人連接到機器時,您可以安裝一個乾淨的虛擬機。

  9. 使用不同的默認網絡端口。

  10. 由於它位於數據中心,因此您需要確保該盒本身能夠查找特定的連接以便正常工作(有點像保持活躍的身份驗證)。這樣,如果盒子中間人試圖讓盒子重新聯機,則必須有人進行實際干預。

  11. 如果服務器場(位於同一機架中)有服務器場中的防火牆或本地網絡,請確保該防火牆不盲目地信任本地網絡。我以前的一些客戶在「安全」網絡中託管的「覈准備」設施中查找其他人,他們已將他們的企業級防火牆後面的千兆交換機修補到與其安全服務器相同的子網中。他們使用我的客戶端連接進行廣播,而不是試圖進入我的客戶端,但他們確實設法用我的客戶端的郵件服務器(微軟)以代碼紅色感染了它。我的客戶端的防病毒/反垃圾郵件防火牆(一個Fortinet)阻止了所有出站virii,蠕蟲和未經請求的郵件(我被防火牆分頁尋找IP的新的mac地址)。幸運的是,我們沒有使用DHCP,本地網絡中的服務器都沒有來回通信,所以當另一個盒子開始端口掃描時,由於出站流量,它找到了交換箱。

  12. 爲了獲得最佳安全性,您需要確保機架本身處於自己的籠中或物理鎖定(獨立)。這有點貴,但如果數據是關鍵任務,那麼如果發生違規,這可能會很糟糕。大多數服務器場相信經過認證的人可以進入網箱,所以他們通常不會將相機放在裝有30-40支架的籠子裏,如果您碰巧在一般人羣中一個主要的服務器場。此外,大多數服務器場都有一些「警衛」或監視攝像頭和登錄的人員以及一些手頭上的技術人員,具體取決於託管在那裏的東西。

  13. 使箱子本身的防火牆只接受來自您自己特定的靜態IP地址的連接,以及箱子上的任何應用也應該進行驗證。如果您使用的是防火牆,只允許可信VPN連接訪問所需資源(Web應用程序,數據庫等)以外的任何其他資源。

希望這會有所幫助。

+1

[HSTS](http://dev.chromium.org/sts)也可能是一個很好的實施建議。我也同意一些OP的做法聽起來有點「過度設計」 – 2013-03-23 00:54:22

+0

不錯。不知道HSTS。即使使用不同的Web端口也會比80或443(HTTPS的默認值)更好。 – 2013-03-23 01:02:15

+0

謝謝@ cpattersonv1,這裏有一些非常有用的信息。 爲了澄清,存儲數據的框不在我們的本地網絡中,它位於面向網絡的安全數據中心內。是的,有鍵盤安全,24小時警衛,相機等,所以這不是太多的關注。我之所以提到關於在我們的網絡上的原因是因爲端口22將開放給我們的網絡連接 感謝您的建議 - 這裏有很多東西讓我思考! – 2013-03-23 10:30:42

2

如果只有用戶上傳需要能夠讀取內容,也許公鑰密碼術可能是有用的?

這樣你就不必在意在內存中有密鑰還是害怕有人嗅探數據。客戶可以在他可能在世界任何地方用他的公鑰加密這些文件。只有當某人有權訪問其私鑰(加密時不需要),您才能夠解密該數據。

GPG對於像這樣的東西是一個很好的工具,並且存在很多圖形用戶界面。

如果服務器是某種備份,只要確保將私鑰的副本存儲在某個安全的地方。這可能是在沒有任何互聯網接入的外部媒介上。

+0

嗨Baloo,感謝您的建議 - 我看過類似的東西,但它並沒有真正用於用例 - 數據將從Web界面訪問,但也需要在Web界面 - 在其他單詞,它需要在Web界面上進行搜索和編輯,這意味着我們需要能夠解密服務器端。 感謝您的建議,但! – 2013-03-23 10:27:46