将银行信息存储在数据库中的最佳做法

时间:2009-02-27 21:11:44

标签: php mysql mcrypt

答案摘要:
不要这样做。法律和财务方面的影响将是灾难性的。寻找既定的第三方解决方案或聘请专家。切勿在共享服务器上存储任何敏感信息。研究最合适的加密机制。

我正在为一个客户建立一个网站,该客户需要将他的客户的银行信息(路由+账号)存储在数据库中以进行直接存款。以下是一些细节:

1)网站最初将位于共享托管服务器上(这是我的第一个问题) 2)我使用的是PHP / MySQL 3)我打算使用mcrypt 4)密钥将位于Web根目录之外。

请让我知道你的想法。如果可能的话,请向我提供有关ACH处理的一些资源。

谢谢!

编辑:我期待这样的回应,因为我也担心安全问题。我向客户表达了我的担忧,这将是一个很好的支持。

编辑2:将离开这一点。首先对这个想法不满意!将调查PayPal的批量支付API。

9 个答案:

答案 0 :(得分:61)

我认为您可以通过使用Paypal's Mass Payment API等内容自行存储任何银行信息,从而解决此问题。这样,您的客户可以向人们付款,而PayPal会存储您不需要的所有信息。

如果您想了解甚至需要采取的所有步骤,甚至可以远程保护客户的敏感财务数据,请点击“PCI Compliance

如果你不是害怕在线存储财务数据,那你就太天真了。

答案 1 :(得分:14)

1)该网站最初将位于共享托管服务器上(这是我首先关注的问题)。     - 特别糟糕。没有对服务器的绝对管理控制,并且能够让其他人离开是一个非常大的问题。

我真的很担心你是从前端Web服务器直接访问数据库的。对于财务数据来说,这是一个很大的禁忌。

即使您拥有最强大的加密算法,也可以阻止某人劫持您的系统并使用它来解密数据。他们不需要密钥,他们只需要您的应用程序为他们完成工作。这假设您使用单个密钥来加密和解密数据,或者您正在从数据库中检索数据以向系统用户显示。

好的,这就是事情。如果您不得不提出这些问题,那么您没有正确的技术专业知识。我不是说听起来很卑鄙,这只是一个事实。我会和一群经验丰富的人一起工作,他们首先做这个职业。这里有很多未提及的事情需要加以考虑。有很多关于安全性的东西本身没有写下来。你读书时不会接受的东西。这是一件非常难以建立的事情,因为那些闯入金融体系的人有很大的回报。

答案 2 :(得分:12)

不要这样做。

如果必须,请使用公钥/私钥加密。仅存储和使用公钥来加密进入数据库的数据。将私钥存储在安全位置(意味着:不是托管服务器,而是具有适当访问控制的“安全”本地计算机)。必要时,将数据下载到本地计算机,使用私钥解密,然后离开。

但严重的是,如果可能的话,找个办法避免这样做。

答案 3 :(得分:4)

在继续之前,请向律师咨询您的潜在责任。将个人银行数据存储在共享托管服务器上会产生危险。您无法控制谁最终可以掌握数据。

另外一个问题是,这不是您客户的数据,而是您客户的客户端数据!您或许可以与您的客户达成协议以赔偿您,但不能在客户参与时进行赔偿。一旦数据受到损害,他们就会立即回到您身边,客户可以随时向下呼吸!

答案 4 :(得分:3)

对于银行信息,您的服务器应该不受共享控制。

另外,mcrypt不是很安全。我知道它是内置的,但我会建议一些不那么具有攻击性的东西,比如RSA。如果有人确实掌握了这些信息,他们就应该在没有私钥的情况下破解它。

答案 5 :(得分:2)

我同意其他人的观点 - 这是一个非常糟糕的主意。

专用服务器每个月的价格可能在79美元到99美元之间,如果价格不合理,我真的很想知道他们为什么要开始处理银行信息。首选方法是在此实例中使数据库与Web框分开。最好在它们之间有一些防火墙和其他保护(即2个防火墙,一个在Web服务器前面,一个在Web服务器和数据库之间)。

但是任何东西都比使用共享托管更好。我的意思是,你可以直接连接到SQL服务器并查看所有可用的数据库 - 以最小的黑客攻击直接进入是多么容易?

另外,请告诉我网站的名称,所以我从来没有注册并把我的银行信息放在上面! :)

另外,在开始共享托管之前,请确保您有错误和省额保险。

答案 6 :(得分:2)

我遇到了和你一样的情况,并以这种方式解决了。

  1. 由于您不会进行ACH处理,因此请确定ACH处理API是否具有创建客户的能力。
  2. 如果是,此客户对象通常包括帐号,路由号等,并将令牌存储在您的数据库中。 (因此,当用户提供他的信息时,您可以通过HTTPS直接将其传递给ACH处理器,并保存令牌)。
  3. 每当您必须从他们的帐户扣款时,将此令牌传递给处理器,那就是它!
  4. 这样,您就不会在数据库中保存任何帐号和路由号码,即使有人攻击数据库,他们只会看到令牌,这是无用的 - 他们无法做任何事情。它,因为它是ACH处理器特定的。

    我使用Stripe完成了类似的信用卡。

    祝你好运!

答案 7 :(得分:1)

你没有这个领域的经验,甚至连仓库俱乐部都找不到这么大的虫子。在这种情况下,您的客户需要聘请领域专家;如果你有兴趣将来做这类工作,尽量与专家密切合作,尽可能多地吸收知识。

答案 8 :(得分:0)

我想这里的每个人都已经宣布了他们对情况的厌恶,所以在进行任何类型的加密时我都会暗示另一个问题(我们同意这是必要的):

数据必须在某处加密!

如果你在服务器上这样做,那么受感染的服务器就会加密并传递它们而不加密它们。

如果你在客户端上这样做,这样会更安全,但是如果有人可以访问你的服务器,它仍然会敞开大门:他们理论上只需打开一个XSS漏洞(即将一个远程脚本插入你的page ...)在加密之前将副本发送到他们的框...

最后:如果您真的考虑在可能不是110%安全的服务器上执行此操作, WALK AWAY