15

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

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

4

3 回答 3

15

这是一个过于简化的答案,应该持保留态度,因为大多数关于安全的答案:

  • 到处使用 SSL。

  • 使用安全的加密密钥

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

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

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

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

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

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

于 2013-02-25T04:09:44.923 回答
15

带有键的 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 插入/XSS:

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

我有很好的经验。

于 2014-12-19T14:46:03.770 回答
1

正如评论中所暗示的那样,您提出了一个很大的问题。您将需要研究一些单独的问题:

  • SQL 注入以及如何防止它
  • XSS 以及如何预防它
  • 使用 SSL 加密提交的表单数据
  • 在数据库中存储敏感信息的最佳实践

很难在一个答案中解决所有这些问题。我建议在此站点上对上述主题进行一些搜索。

于 2013-02-25T04:08:41.470 回答