我正在为我工作的公司提出求职申请。我已经有了它来防止SQL注入和一些XSS技术。我的主要问题是保护敏感信息,如SSN和地址,因为公司需要为销售人员的税收制作1099份表格。
我不知道如何做这个部分,但是我应该加密一切,然后在进入MySQL数据库时解密它吗?
答案 0 :(得分:11)
这是一个过于简化的答案,应该带着一点点思考,就像大多数关于安全性的答案一样:
在任何地方使用SSL。
使用安全加密密钥
对于加密数据的存储,您可以使用BLOB
字段,并使用MySQL的built in encryption functions。例如:
update mytable set myfield = AES_ENCRYPT('some value', SHA2('your secure secret key', 512));
如果您更喜欢在应用程序代码中进行加密/解密,请查看PHP的Mcrypt函数。
这绝不是一个完整的指南,但它是一个开始,而不是什么都不做。
上了解详情答案 1 :(得分:6)
带有密钥的SQL查询(如Wesley Murch suggests)不是一个好主意。 如果你这样做:
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对它有很好的支持。
如果您想了解更多信息,可以谷歌"用户控制加密"或者"零知识隐私"。
SQL插入/ XSS:
最好的保护是安全的应用程序。毫无疑问。如果您想保护它,您可以使用for PHP PHP ID来检测攻击: https://github.com/PHPIDS/PHPIDS
我有很好的经验。
答案 2 :(得分:1)
正如评论中暗示的那样,你提出了一个很大的问题。您将需要研究一些单独的问题:
在一个答案中很难解决所有这些问题。我建议在本网站上进行一些搜索,以了解上述主题。