使用 ASP.NET MVC 进行信用卡支付(有卡、刷卡)

Posted

技术标签:

【中文标题】使用 ASP.NET MVC 进行信用卡支付(有卡、刷卡)【英文标题】:Credit card payments (card-present, swiped) with ASP.NET MVC 【发布时间】:2014-07-25 21:54:07 【问题描述】:

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

最简单的方法可能是进行简单的“键盘楔形”滑动(现在是 USB),以便将曲目数据作为键盘输入发送到密码类型的输入字段。

不过,我对这种方法存在一些安全问题:

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

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

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

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

谢谢。

【问题讨论】:

【参考方案1】:

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

但也有符合 PCI-DSS 标准的磁卡读卡器,它们将使用 3DES 加密数据并提供设备/主机身份验证。此设备将允许您绕过嗅探,使用 HID 模式而不是键盘模拟,从而允许与设备直接通信。

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

我真正喜欢的其他替代方案是连接到智能手机音频插孔上的替代方案。就像您肯定见过或听过的 Square 设备一样。它们具有相同的TDAE和DUKPT原理,但将数据调制成由App解调的声音。

如果您计划接受信用卡作为“卡片存在”,则需要执行此安全步骤。如果您对“卡不存在”没问题,您可以捕获跟踪数据并将其发送到支付网关以供批准。支付网关不会知道卡是否真的存在,或者您是否手动输入了信息。如果您想拥有“Card Present”功能,支付网关将要求您使用 PCI 认证设备。

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

【讨论】:

这是一个 ASP.NET 应用程序,但它可以与执行“滑动通信”的本地软件组件结合使用(ASP.NET 客户端通过本地主机与组件通信)一些端口)。或者可以使用 TCP/IP(安全)从客户端进行交互的联网刷卡设备。我想我最好的选择是与支付处理器核实以了解可用的内容......【参考方案2】:

我已经联系了几家支付网关和信用卡刷卡公司,这里有一个相当简单的方法可以在 ASP.NET 应用程序中使用信用卡刷卡完成端到端加密:

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

2) 向处理器/网关发送滑动消息,处理器/网关会将其加密密钥注入设备。

3) 正确配置刷卡后,它将以键盘输入的形式发送高度加密的刷卡数据,然后您可以将其从客户端 javascript 传递到服务器,然后将其发送到支付网关,支付网关解密和处理数据。刷卡还会发送未加密的数据的某些部分(例如卡号的前 4 位和后 4 位)。

【讨论】:

以上是关于使用 ASP.NET MVC 进行信用卡支付(有卡、刷卡)的主要内容,如果未能解决你的问题,请参考以下文章

csharp ASP.NET MVC 3的信用卡验证器属性

微信扫码支付+Asp.Net MVC

如何在 ASP.NET 中实现支付网关 [关闭]

ASP.NET MVC 4 HttpClient() 问题

如何扩展 ASP.NET MVC2 开箱即用验证以验证信用卡/电子邮件?

使用 PayPal REST API ASP.NET MVC 一次支付多个项目