如何保护我的MySQL数据库安全?

10

我将实现一个PHP/mySQL设置,用于存储信用卡信息。

看起来AES_ENCRYPT/AES_DECRYPT是正确的选择,

但我还有一个困惑:

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

将其硬编码到我的PHP脚本中(这些脚本将与数据库位于同一台服务器上)似乎会造成重大安全漏洞。

在这里,有什么最佳实践解决方案吗?

5个回答

16

你应该认真思考是否确实需要保留信用卡号。如果没有充分的理由,请不要保留!每隔一周就会听到某些公司被攻击并且信用卡号被盗。这些公司都犯了一个致命的错误——他们保留了太多信息。在交易完成前保留信用卡号,交易完成后删除它。

至于保护服务器,最好的方法是保护硬件,并使用内部系统套接字连接到MySQL,并确保阻止任何对MySQL服务器的网络访问。确保您同时使用系统权限和MySQL权限来允许尽可能少的访问权限。对于某些脚本,您可以考虑使用只写身份验证。实际上没有加密方法是万无一失的(因为您总是需要解密,因此必须存储密钥)。这并不是说您不应该这样做——您可以将密钥存储在一个位置,并在检测到系统被攻击时销毁文件,从而使数据无效。


1
尽可能避免存储信用卡数据。处理后立即丢弃,并让像PayPal这样的服务来处理循环交易。 - ceejayoz
2
如果出现退款情况(即信用卡持有人声称交易有误),您需要保留信用卡号码的最后四位数。 - BlaM
3
出于统计原因,也许需要使用前六位数字。前六位数字可以识别发卡银行,因此您可以查看是否有大量来自某家银行的欺诈交易,这样在糟糕情况下,您就可以开始阻止多张信用卡。 - BlaM
哈哈哈,又长又难! - Kobbe

3
MySQL有六个简单的步骤,可以保护您的敏感数据。
步骤1:删除授权表中的通配符。
步骤2:要求使用安全密码。
注意:使用MySQL的“--secure-auth”选项可以防止使用旧的、不太安全的MySQL密码格式。
步骤3:检查配置文件的权限。
步骤4:加密客户端-服务器传输。
步骤5:禁用远程访问。
步骤6:积极监控MySQL访问日志。
安全工具。

0

将数据库文件放在计算机外,比如外部硬盘,并将其放在安全的地方。这仅适用于您只能在放置此外部驱动器的位置开发此项目的情况下 :) 或者,您可以使用文件系统加密工具来保护这些文件,例如https://itsfoss.com/password-protect-folder-linux/

在生产环境中,我同意Kyle Cronin的观点。


0

我同意,但如果你不需要cc的话就不要使用。但如果你真的需要,确保拥有它的文件不可在Web上访问。你可以编写一个返回密钥的二进制文件,这样它就不会以明文形式存储。但是,如果你的服务器被攻击,仍然很容易获取它。


0

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接