[抱歉抱怨漫長而漫長的問題。我希望引發一些比我更懂事的人們的討論/建議。如果這真的不適合SO,請給我一個提示,在哪裏可以提出這樣的問題。]在Azure上使用Azure SQL數據庫實現安全的ASP.net應用程序
我有一個ASP.NET MVC 4應用程序。我正在使用Azure Web角色來託管它(至少現在是這樣)。我的應用程序是一種專門的醫學訪談,收集用戶的敏感信息,並生成一份報告,可供醫生和患者查看並傳遞給(通過加密的PDF文件附加到未加密的電子郵件)。敏感數據保留24小時,以便醫生回來並檢索報告,在這段時間後記錄被刪除(我知道這實際上並未從持久存儲中刪除數據)。
因此,我開始思考我需要擔心的安全邊界問題,以確保機密數據的機密性。儘管我是一位經驗豐富的桌面應用程序開發人員,但我並不熟悉整個Web編程。
我需要擔心的第一個明顯的安全邊界是服務器和用戶之間的通信層。我有一個有效的,正確配置的SSL證書,並且處理登錄用戶(包括訪問和報告工作流程)的網站的所有部分都通過HTTPS端點進行操作。
我假設/希望Azure的SSL實現正確無誤,並且我無法或應該採取措施加強主機本身。
爲了方便用戶,我允許訪問者瀏覽到http://mywebsite.com,並且如果他們登錄時我重定向到標有[RequiresHttps]的頁面。我知道這個HTTP到HTTPS重定向容易受到SSLStrip man-in-the-middle attack,其中服務器看到一個安全的HTTPS連接,但警惕的用戶會注意到該URL是HTTP而不是HTTPS。我打算保留這個便利功能,但我會通過採用擴展的驗證證書來緩解此問題,該證書爲大多數用戶提供了一個快樂的綠色地址欄。我會在主登錄用戶頁面上提供一些提醒用戶驗證綠色地址欄的內容。
我會弄清楚如何配置ASP.NET,以便我的所有cookie都被加密。
我已啓用遠程桌面(在Azure部署嚮導中),以便在有人可以找出我的用戶名和密碼時打開可被攻擊的門戶。這就是生活。
我需要擔心的下一個安全邊界 - 這是我需要幫助的地方 - 在未經授權的人訪問數據庫的情況下保護敏感數據。我對數據庫管理的瞭解僅限於複製和粘貼連接字符串以及編寫簡單的SQL查詢。
我正在使用實體框架和Azure SQL數據庫的所有我的數據庫的東西。我使用烘焙到代碼中的密鑰加密數據實體中的敏感數據。據推測,數據庫本身是加密的,只需掌握數據庫文件(Azure SQL數據庫接口可通過Web連接訪問,但只能來自可信IP地址)的人需要找出我的SQL用戶名和密碼,以便將數據輸出。
有人可能會欺騙我的應用程序泄露敏感信息。我的工作流程只允許登錄用戶讀取和寫入自己的記錄。爲了讓攻擊者訪問加密的敏感數據,他們可能需要獲取我的加密密鑰或找出調用我的代碼的方法。我沒有混淆.NET代碼; 我假設我的可執行文件是安全的。我也假設我的明文網。包含我的數據庫憑證的config是安全的。這些好的假設?
所以,就我的初學者大腦已經把我帶入安全路徑而言。任何意見或建議?我是否做過任何不正確的假設或忽略了任何明顯的假設?
鑑於您的應用程序是醫療保健應用程序,請在Azure上檢查Azure信任中心以瞭解合規性詳細信息。我在Cloud System Integration Company工作,在研究應用程序/技術之前,以上是我們要求的前5名之一。 – 2013-03-10 19:44:32