繁体   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