如何将敏感数据安全地存储在 MySQL 数据库中?

2022-08-31 00:32:38

我正在为我工作的一家公司提出求职申请。我有它来防止SQL注入和一些XSS技术。我的主要问题是保持敏感信息的安全,如SSN和地址,因为公司需要这些来制作1099表格的销售人员税。

我不知道如何做这部分,但是我应该加密所有内容,然后在它进入MySQL数据库时对其进行解密吗?


答案 1

带有键的SQL查询(正如Wesley Murch所建议的那样)不是一个好主意。如果您这样做:

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

...并且查询将被记录(inst.的慢日志)您的安全密钥以纯文本形式捕获,这不应该发生。当您运行类似 查询时,具有密钥的此类查询也将可见。SHOW PROCESSLIST

下一个问题在哪里存储安全密钥?在 PHP 文件中?它又是纯文本。

加密数据:

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

  • 公钥可以与用户一起存储在数据库中,它是公共的。
  • 私钥可以使用用户的密码进行加密。当用户登录时,您可以解密私钥并将其存储在他的cookie(如果您使用SSL,则不是那么糟糕的地方)或会话中。两者都不是完美的,但比php文件中的纯文本更好。
  • 使用公钥进行加密,使用私钥进行解密。
  • 只有用户才能访问他的数据。

如果您想了解更多信息,可以Google搜索“用户控制加密”或“零知识隐私”。

SQL inserts / XSS:

最好的保护是安全的应用程序。如果你想保护它,你可以使用inst PHP IDS来检测攻击:https://github.com/PHPIDS/PHPIDS

我有很好的经验。


答案 2

这是一个过于简化的答案,应该谨慎对待,因为大多数关于安全性的答案:

  • 随时随地使用 SSL。

  • 使用安全加密密钥

对于加密数据的存储,您可以使用字段,并使用MySQL的内置加密功能。例:BLOB

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

如果您希望在应用程序代码中进行加密/解密,请查看PHP的Mcrypt函数。

  • 加密用户输入
  • 存储在数据库中
  • 获取后解密

这绝不是一个完整的指南,但它是一个开始,总比什么都不做要好。

您也许可以了解有关 https://security.stackexchange.com/


推荐