我正在開發一個小型輔助醫療應用程序(主要是病人的日曆和信息),這些應用程序將通過網絡託管。該應用程序將允許多個賬戶(每個從業人員1)不會共享數據。 我要保護的個人數據儘可能,尤其要避免2可能出現的問題:如何保護網絡應用/數據庫中的醫療數據?
1 /編程錯誤,可能會導致一個醫生,如果完整的數據庫被竊取從別人那裏 2 /訪問數據,我希望個人信息是安全的
我知道第一件事是避免每一個sql或參數注入,但我想採取額外的步驟,因爲我是人類,我知道只有一個錯誤可能會導致真正的混亂,如果數據泄漏...我真的想避免這種情況。
- 該應用程序是基於PHP和MySQL
- 應用必須有辦法通過它自己的解密個人數據,例如因爲它發出的背景電子郵件和手機短信向患者提醒他們約會。
- 從業者通常有一名祕書,必須能夠使用自己的登錄名/密碼訪問該應用程序,並查看從業者的數據(但不是全部,只有與聯繫信息,預約日期/時間有關的數據。 )
- 當然,從業者或祕書應該能夠在數據庫中進行搜索,例如通過名字,電話號碼找到患者,即使它在數據庫中被加密。
所以...我試圖找出存儲,加密,解密數據的最佳方法。我也有點害怕的表現,例如在加密數據搜索引擎...
現在這裏是我有最簡單的想法: 1 /當一個新的從業者造成我產生一個帳戶與帳戶相關的唯一密鑰永遠不會改變,並將其存儲在數據庫中......它將成爲一種「鹽」,對於每個個人數據,我都會對其進行加密(例如:病人的姓名,電話號碼),其中一個鍵由兩部分組成:一個與整個應用程序相同(例如,存儲在php配置文件中)+從醫生帳戶中獲取的「鹽」。
這很實用,因爲從業人員的密碼和應用程序之間沒有任何關聯,所以例如從業人員祕書訪問數據沒有問題,我的電子郵件/短信任務解密數據,以及從業者是否丟失了密碼(這比數據庫的竊取更可能發生)。 我首先想象的是使用從業者的(清除)密碼來加密加密密鑰,但是不可能用祕書賬戶或計劃任務來訪問數據。 如果我使用從業者密碼(存儲在數據庫中)的散列加密加密密鑰,它會複雜得多,並且實際上並沒有增加安全性優勢。
問題:
A /你覺得它足夠強還是我失去了一些東西? 我知道,如果整個服務器遭到破壞,數據可能不安全(如果黑客足夠聰明,找到密鑰,編寫代碼來解密所有數據)......但這並不是我所害怕的。而且我找不到任何更好的解決方案來保證日程安排任務能夠解密數據。 你有更好的建議嗎?
乙/你將如何加密/解密文本數據? (算法,密鑰,數據庫...)我真的很陌生,我害怕犯錯誤。我閱讀文檔,但缺乏完整的真實生活實例(從密鑰生成到文本加密/解密)。 我擔心utf8問題,密鑰長度問題(從固定部分創建複合密鑰(php配置文件)和存儲在數據庫中的可變部分有什麼好的做法?)...
C/for搜索引擎,你會怎麼做?例如我想找到一個名字以「ABCD」開頭的人,我是否有更好的辦法來完成它,比檢索所有加密名稱的列表,解密(php)每個名字,把它們放在一個列表中,然後仍然PHP)在該列表內做一個搜索功能?你認爲我應該使用MySQL的AES_ENCRYPT/AES_DECRYPT函數來加密/解密整個數據嗎?
在此先感謝
Mysql函數(AES_ENCRYPT/AES_DECRYPT)似乎是一個好方法。我嘗試過,效果很好,尤其是因爲如你所說,它使得事情變得更容易處理(插入/更新)...並且搜索功能工作得非常好:簡單的「SELECT ... FROM ... WHERE AES_DECRYPT(名字,'mykey')LIKE'%..%'工作沒有任何問題 – spf 2015-01-22 12:56:25