我目前正在为客户创建一个应用程序,该应用程序将允许他们自动向客户的信用卡收费。
我很好奇什么是安全存储和访问信用卡信息的最佳实践,以及任何其他敏感信息,如社会安全号码、帐号等。
我假设将采用某种类型的加密,但在深入研究之前,我想看看其他人如何处理这些类型的要求。
这并不重要,但我们正在使用 Microsoft SQL Server 为数据库设计软件,并使用 C# 和 ASP.NET。
我目前正在为客户创建一个应用程序,该应用程序将允许他们自动向客户的信用卡收费。
我很好奇什么是安全存储和访问信用卡信息的最佳实践,以及任何其他敏感信息,如社会安全号码、帐号等。
我假设将采用某种类型的加密,但在深入研究之前,我想看看其他人如何处理这些类型的要求。
这并不重要,但我们正在使用 Microsoft SQL Server 为数据库设计软件,并使用 C# 和 ASP.NET。
阅读PCI 要求。一切都会在那里。
事实上,你必须跟随他们。
1 - 除非你真的需要,否则不要收集 SSN。除非你是银行或政府,否则你很可能不是。
2 - 除非您确实需要,否则不要收集其他敏感信息
3 - 使用任何适当的控件(数据库的单独机器,防火墙,访问控制等)来处理您真正需要保留的东西。
在操作系统和物理安全方面使用激进的标准来保护主机系统,例如NSA 指南。
将数据库放在与 Web 服务器或其他功能不同的系统上,以防止物理访问和权限升级漏洞。
进行防御性编程以避免 SQL 注入攻击和类似的攻击。
开发时,首先要考虑安全性。之后回来并应用安全性将很困难且容易出错。
尝试将应用程序的各个部分分开......即不要将相同的查看器或控制器用于“公共”访问和“私人”访问。
请注意并遵守有关处理这些数据的所有当地法律......那里有很多。
保留一些信封,以便在发生违规事件时通知您的客户。如果您丢失了 2600 万客户的信息,您可能无法获得足够的信封来满足通知他们违规的法定时限。
不要——我的意思是,你真的需要吗?
有一个强大的第三方支付服务市场,他们可以为您接收详细信息,并在付款后简单地向您发送消息。有像 PayPal 这样的替代品,您可以使用 MD5 或 SHA1 保护数据 - 丢弃诸如确切的数字字符串之类的琐事。
不同的应用程序需要不同的 PCI 标准合规性。如果您的应用程序只是收集 CC 号码,然后将它们提交给符合 PCI 的第 3 方支付网关,那么您的合规性要求并不算太差 - 只要您不存储卡号或 CVV。
在记录方面,您应该“删除”信用卡号,例如保留前 6 位和后 3 位,但隐藏中间位。根本不记录 CVV。
PCI 标准文档非常详细,但这完全取决于您的应用程序的要求,即您需要什么级别的合规性。
与OWASP威胁密切相关,并准确了解如何在您的应用程序和框架中应对它们。很难相信有多少人采用愚蠢的半解决方案来应对 SQL 注入和跨站点脚本攻击。