10

我将实施一个PHP/mySQL设置来存储信用卡信息。

这似乎AES_ENCRYPT/AES_DECRYPT是要走的路,

但我仍然对某一点感到困惑:

如何保证加密密钥的安全?

将其硬连线到我的 PHP 脚本中(它将与数据库位于同一服务器上)似乎是一个主要的安全漏洞。

这里的“最佳实践”解决方案是什么?

4

5 回答 5

16

您应该仔细考虑是否真的需要保留 CC#。如果您没有充分的理由,请不要!每隔一周,您就会听到一些公司遭到入侵和 CC# 被盗的消息。所有这些公司都犯了一个致命的缺陷——他们保留了太多的信息。保留 CC# 直到交易清除。之后,将其删除。

就保护服务器而言,最好的做法是保护硬件并使用 MySQL 的内部系统套接字,并确保阻止对 MySQL 服务器的任何网络访问。确保您同时使用系统权限和 MySQL 权限,以根据需要允许尽可能少的访问。对于某些脚本,您可能会考虑只写身份验证。确实没有万无一失的加密方法(因为您总是需要解密,因此必须存储密钥)。这并不是说您不应该 - 您可以将密钥存储在一个位置,如果您检测到系统受损,您可以破坏文件并使数据变得无用。

于 2008-09-11T01:35:45.560 回答
3

MySQL,您可以通过六个简单的步骤来保护您的敏感数据。

第 1 步:删除授权表中的通配符

第 2 步:要求使用安全密码

注意:使用 MySQL “--secure-auth” 选项来防止使用旧的、不太安全的 MySQL 密码格式。

第三步:检查配置文件的权限

第 4 步:加密客户端-服务器传输

第 5 步:禁用远程访问

第六步:主动监控MySQL访问日志

安全工具

于 2011-09-24T08:00:04.113 回答
0

我同意,但如果你不需要也不要抄送。但如果你真的有,请确保拥有它的文件无法在网络上访问。您可以编写一个返回密钥的二进制文件。这样它就不会以明文形式存储。但是,如果您的服务器受到损害,仍然很容易得到它。

于 2008-09-11T02:25:21.260 回答
0

您需要的安全性取决于您的应用程序。例如,如果 cc# 仅在用户登录时使用(精简在线商店类型场景),那么您可以使用用户纯文本密码的哈希值加密 cc#,per-用户 salt 和专用的 cc# salt。不要永久存储此值。

由于您没有存储此值,因此您唯一可以获得此值的时间是用户输入密码登录时。只需确保您有良好的会话到期和垃圾收集策略。

如果这种情况不适用于您,请更详细地描述您的情况,以便我们提供更合适的答案。

于 2008-09-15T15:48:37.800 回答
0

将您的数据库文件放在计算机外部,比如说外部硬盘并将其保存在安全的地方。仅当您只能在放置此外部驱动器的地方开发此项目时才有效:) 或者您至少可以使用文件系统加密工具(如 https://itsfoss.com/password-protect-folder-linux/ )保护这些文件

在生产环境的情况下,我同意 Kyle Cronin。

于 2020-01-21T11:11:52.400 回答