簡體   English   中英

如何將敏感數據安全地存儲在MySQL數據庫中?

[英]How can I store sensitive data securely in a MySQL database?

我正在為我工​​作的公司提出求職申請。 我已經有了它來防止SQL注入和一些XSS技術。 我的主要問題是保護敏感信息,例如SSN和地址,因為公司需要為銷售人員的稅收制作1099個表格。

我不知道如何做這個部分,但是我應該加密一切,然后當它進入MySQL數據庫時解密它?

這是一個過於簡化的答案,應該與大家一起考慮,因為大多數關於安全性的答案:

  • 到處使用SSL。

  • 使用安全加密密鑰

對於加密數據的存儲,您可以使用BLOB字段,並使用MySQL的內置加密功能 例:

update mytable set myfield = AES_ENCRYPT('some value', SHA2('your secure secret key', 512));

如果您更喜歡在應用程序代碼中進行加密/解密,請查看PHP的Mcrypt函數。

  • 加密用戶輸入
  • 存儲在數據庫中
  • 取出后解密

這絕不是一個完整的指南,但它是一個開始,而不是什么都不做。

您可以在https://security.stackexchange.com/上了解更多信息。

帶有密鑰的SQL查詢(正如Wesley Murch 建議的那樣 )並不是一個好主意。 如果你這樣做:

update mytable set myfield = AES_ENCRYPT('some value', 'your secure secret key');

...並且查詢被記錄(inst的slowlog)你的安全密鑰以純文本形式捕獲,這絕不應該發生。 當您運行SHOW PROCESSLIST類的查詢時,使用密鑰的這種查詢也是可見的。

下一個問題在哪里存儲安全密鑰? 在PHP文件中? 它再次是純文本。

加密數據:

使用私鑰/公鑰加密( http://en.wikipedia.org/wiki/Public-key_cryptography )。 PHP對它有很好的支持。

  • 公鑰可以與用戶一起存儲在DB中,它是公共的。
  • 私鑰可以使用用戶密碼加密。 當用戶登錄時,您解密私鑰並將其存儲在他的cookie中(如果您使用SSL,它不是那么糟糕的地方)或會話。 兩者都不完美,但比php文件中的純文本更好。
  • 使用公鑰加密,私鑰解密。
  • 只有用戶才能訪問他的數據。

如果您想了解更多信息,可以谷歌“用戶控制加密”或“零知識隱私”。

SQL插入/ XSS:

最好的保護是安全的應用程序。 毫無疑問。 如果你想保護它,你可以使用PHP PHP IDS來檢測攻擊: https//github.com/PHPIDS/PHPIDS

我有很好的經驗。

正如評論中暗示的那樣,你提出了一個很大的問題。 您將需要研究一些單獨的問題:

  • SQL注入以及如何防止它
  • XSS以及如何防止它
  • 使用SSL加密提交的表單數據
  • 將敏感信息存儲在數據庫中的最佳實踐

在一個答案中很難解決所有這些問題。 我建議在本網站上進行一些搜索,以了解上述主題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM