使用ASP.NET MVC进行信用卡付款(存在卡片,刷卡)

时间:2014-06-05 03:27:59

标签: asp.net-mvc security pci-dss

我需要使用在ASP.NET MVC应用程序中刷过的实体卡进行信用卡付款。

最简单的方法可能是进行简单的“键盘 - 楔形”滑动(现在是USB),这样轨道数据就会作为键盘输入发送到密码类型的输入字段。

我对此方法存在一些安全问题:

  • 如果在光标位于错误的字段时刷卡,则会以明文显示完整的跟踪数据。
  • 没有端到端加密(=内存/浏览器缓存中明文中的卡片数据),并且可以被键盘嗅探器抓取。
  • 必须将完整的跟踪数据发送到服务器,然后将其发送到任何支付网关。当然,在两种情况下都通过SSL,但这会将Web服务器添加到攻击面。直接与来自客户端的支付处理器的交互将避免这种情况(如果可行的话),以便只有被屏蔽的卡#+授权号或令牌等必须转到服务器。

我有一些可能更好选择的想法,但我不确定它们是否可行:

  • 独立的信用卡设备,直接与支付处理器对话,并通过ASP.NET应用程序以某种方式与PC集成。也许是一个信用卡设备,它可以监听ASP.NET应用程序可以通过它与客户端进行通信的TCP端口。或通过USB连接并通过浏览器插件或类似方式进行交互。
  • 一个小的iframe或类似的直接使用支付处理器的“支付小部件”
  • 使用USB刷卡(尽管可以嗅探)+一些客户端库直接与支付处理器进行交互。

我正在寻找一些关于良好方法(可靠和安全)的反馈和想法来实现这一目标(我还计划联系一些支付处理器,看看我能从中找到什么)。

感谢。

2 个答案:

答案 0 :(得分:2)

您的担忧是有效的,因为磁条实际上已经过时了。在美国,它很常见,但在其他国家,信用卡使用智能芯片,该芯片提供增强的安全性,防止克隆磁卡。

但是有些PCI-DSS兼容的磁卡读卡器将使用3DES加密数据,并且还提供设备/主机验证。此设备允许您绕过嗅探,使用HID模式而不是键盘模拟,这样可以直接与设备通信。

当通过Reader刷卡时,轨道数据将是使用DUKPT(每个事务的衍生唯一密钥)密钥管理加密的TDEA(三重数据加密算法,又称三重DES)。这种密钥管理方法使用基本派生密钥来加密生成初始加密密钥的密钥序列号,该密钥在部署之前注入到Reader中。在每次事务之后,根据DUKPT算法修改加密密钥,以便每个事务使用唯一密钥。因此,每个事务都会使用不同的加密密钥对数据进行加密。

我真正喜欢的其他选择是连接到音频插孔上的SmartPhones的替代品。就像Square设备一样,您肯定已经看过或听过。它们具有与TDAE和DUKPT相同的原理,但将数据调制为由App解调的声音。

如果您计划接受信用卡作为"卡片存在",则需要执行此安全步骤。如果你没有"卡不存在"您可以捕获跟踪数据并将其发送给支付网关进行审批。支付网关将不知道该卡是否真的存在或您是否手动输入信息。如果你想拥有" Card Present"支付网关要求您使用PCI认证设备。

关于ASP.NET MVC,这是不可能的,这必须是客户端应用程序或软件才能进行端到端加密。

答案 1 :(得分:0)

我已经联系了多个支付网关和信用卡刷卡公司,这是一种在ASP.NET应用中使用信用卡刷卡实现端到端加密的相当简单的方法:

1)使用像IDTech IDRS系列滑动一样的滑动(键盘楔型 - 不是HID):http://www.idtechproducts.com/download/swipe-readers/doc_download/166-user-manual.html

2)发送滑动处理器/网关,他们将加密密钥注入设备。

3)正确配置滑动后,它会发送强加密的滑动数据作为键盘输入,然后您可以从客户端javascript传递到服务器,服务器又将其发送到支付网关,解密并处理数据。滑动还将发送未加密的某些数据部分(例如卡号的第一个和最后4个数字)。