2013-02-25 88 views
9

我正在爲我工​​作的公司提供就業申請。我有它來防止SQL注入和一些XSS技術。我的主要問題是保持敏感信息的安全,比如SSN和地址,因爲公司需要爲銷售人員製作1099個稅表。如何將敏感數據安全地存儲在MySQL數據庫中?

我不知道該怎麼做,但是我應該加密一切,然後在進入MySQL數據庫時將其解密?

+0

如果你想要它的安全,它應該在MySQL數據庫中進行加密,而不僅僅是在傳輸過程中。 – Jon 2013-02-25 03:49:54

+0

如果它可以被你解密,它通常可以被有權訪問你的數據庫的人解密。也許你需要聘請專業人士? – sjdaws 2013-02-25 03:50:50

+0

這是一個非常寬泛的問題,雅各布。你能再關注一下嗎?如果您對端對端加密更感興趣(爲什麼?爲了確保機密性,以便您的用戶相信他們將數據提交給正確的實體?),然後取出其他位。你在這方面的背景是什麼?如果它幾乎沒有,那麼讓我虛心地建議你做一些脫機閱讀 - 任何可以適用於SO回答的幫助都沒有多大幫助。 [OWASP](https://www.owasp.org/index.php/Category:OWASP_Guide_Project)是一個很好的開始。 – 2013-02-25 03:51:15

回答

9

這是一個過於簡化的答案,並應採取與一粒鹽,因爲大多數回答了有關安全:

  • 使用SSL無處不在。

  • 使用安全的加密密鑰

對於加密數據的存儲,你可以使用一個BLOB場,並使用MySQL的built in encryption functions。例如:

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

如果你喜歡做在應用程序代碼的加密/解密,看看PHP的Mcrypt功能。

  • 加密數據庫中的
  • 用戶輸入
  • 商店解密獲取它

後,這絕不是一個完整的指南,但它是一個開始,比什麼都不做要好。

您可以學會與它的關鍵更多在https://security.stackexchange.com/

+0

所以你說什麼加密它,並把加密信息在數據庫中,然後當我們需要它以某種方式解密它在一個安全的,而不是公共,單獨的網頁? – 2013-02-25 04:14:40

+0

你應該更好地解釋加密,這非常重要,而且開發人員確保我們的安全性很好,這是我們的工作。看看[這](http://stackoverflow.com/questions/16600708/how-do-you-encrypt-and-decrypt-a-php-string/30159120#30159120)回答一個問題,他有一個很好的加密指南。 – dspacejs 2015-08-03 00:30:32

+0

最好不要使用mcrypt,它是棄用軟件,未經過多年更新,不支持標準PKCS#7(néePKCS#5)填充,只能使用非標準的null填充,甚至不能用於二進制數據。 mcrypt有很多優秀的[bug](https://sourceforge.net/p/mcrypt/bugs/)可以追溯到2003年。相反,考慮使用[defuse](https://github.com/defuse/php-encryption),它正在維護和正確。 – zaph 2016-07-13 17:07:54

1

正如評論中所暗示的,您提出了一個巨大的問題。你將需要研究一些不同的問題:

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

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

5

SQL查詢(如韋斯利默奇suggests)是不是一個好主意。 如果你這樣做:

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

...和查詢得到記錄(slowlog的研究所。)您的安全密鑰以純文本格式,這絕不應該發生抓獲。當您運行像SHOW PROCESSLIST這樣的查詢時,使用密鑰的這種查詢也會顯示出來。

下一個存儲安全密鑰的問題在哪裏?在PHP文件中?這又是純文本。

加密數據:

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

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

如果你想了解更多,你可以谷歌「用戶控制加密」或「零知識隱私」。

SQL插入/ XSS:

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

我對它有很好的使用經驗。

相關問題