2012-09-24 129 views
1

我想在mysql數據庫中存儲敏感用戶數據,如姓名和地址。如何在mysql中使用php存儲敏感用戶數據

我的主要問題是如何搜索包含加密數據的數據庫。

如果有人偷電腦,它不好,如果數據以純文本格式存儲,所以我想用一個存儲在php文件中的密鑰加密它。 這個php文件是用ioncube編碼的,所以php代碼裏的一個鍵是(非常)安全的。

另一方面,我也希望能夠從web-frontend查詢用戶名和地址的應用程序。

我的第一個想法是在數據存儲之前和我的搜索頁面中加密數據,我將不得不讀取整個用戶數據庫並將其完全解密,以便可以使用php搜索結果。

但對於大型用戶數據庫,這將是非常強烈的記憶。


附加信息:

我已經加密的密碼,所以我需要的是無解的。

我需要一個PHP和MySQL的解決方案,因爲我無法更改服務器配置(光盤加密等)服務器是一箇舊的Ubuntu 9安裝,這是非常不安全的,但不能改變的原因,我不會在這裏解釋。

+0

您可以使用MD5或類似軟件進行加密,並使用ID進行檢索。 –

+0

我認爲你的意思是_sensitive_用戶數據:) – Deebster

+2

@VijaySarin,對於1 MD5不加密,2 MD5是可破解的。與時俱進。 – Petah

回答

2

您可以加密數據庫行中的每個敏感字段,但需要保證密鑰的安全。如果您擔心整個服務器被盜,那麼您無法將解密密鑰存儲在文件系統中,因爲這些密鑰會與機器一起被盜。

您可以使用用戶密碼生成的密鑰對每個用戶進行加密。由於您(我假設)僅存儲密鑰的散列(使用Bcrypt),攻擊者很難檢索用戶的密碼。 但是,這意味着只有用戶可以查看他的數據;管理員帳戶將無法解密其他用戶的敏感數據。這對你來說可能是一種破壞行爲。

如果數據需要被用戶旁邊的其他人訪問,那麼您必須在您的應用中全局使用相同的加密密鑰。如果沒有配置文件中的這個密鑰,你唯一的選擇就是嘗試將密鑰存儲在內存中(這樣你就不得不在系統可用之前初始化系統)。這不足以保證密鑰沒有寫入磁盤(認爲交換文件等),但會更接近於冷啓動後保護數據。

+0

聽起來不錯。我的主要問題是如何搜索包含加密數據的數據庫 – rubo77

+1

在哪個版本中?如果您正在使用全局密鑰並搜索完全匹配,則可以加密搜索值並與密文匹配。否則,您需要解密您希望檢查的每個字段。 – Deebster

+1

太棒了!謝謝,這就是我一直在尋找的解決方案(不明白爲什麼這樣做會因爲沒有建設性而關閉) – rubo77

0

很簡單,將您的服務器存儲在鎖和密鑰(或生物識別安全)的後面。

並散列你的密碼。選項2使用encrypted file system

+0

對不起,我的客戶機上無法做到這一點。 (太多的問題,不同的安裝) – rubo77

+0

@ rubo77那麼它看起來像你卡在不安全的數據。 – Petah