防止将响应值发布到 asp.net 页面而不是支付网关方式

Posted

技术标签:

【中文标题】防止将响应值发布到 asp.net 页面而不是支付网关方式【英文标题】:Prevent posting response value to asp.net page other than payment gate way 【发布时间】:2021-08-15 11:14:20 【问题描述】:

我正在使用 c# asp.net(.NET framework 4.0) 集成支付网关“First Atlantic Commerce”。我使用了 3dsecureAuthorize 方法。在这种方法中,支付网关将响应值发布到我们的商家网站。对于创建的名为“Success.aspx”的页面,该页面从支付网关接收一些响应值,这些响应值在处理交易后由支付网关发布。我使用下面的代码来接收响应值

request.form["responsecode"]

并将交易的支付状态更新到商家网站,这似乎任何人都可以从支付网关以外的任何人将响应值发布到此页面“Success.aspx”。如果发生这种情况,则有机会从其他来源将付款状态更新到我们的网站,而无需通过付款网关进行付款。能否请您告诉我如何防止将数据发布到此页面而不是支付网关的尝试?

【问题讨论】:

理想情况下,响应应该有某种SingleUseToken 你能发布一个示例回复吗?带有虚拟值的完整 jsonxml 这是示例响应,类似于查询字符串:- MerID=&AcqID=464748&OrderID=TEST013009&ResponseCode=1&ReasonCode=1&Re asonCodeDesc=Transaction+is+approved.&ReferenceNo=903016874912&PaddedCardNo=XXXXXXXXXXX 65&AuthCode=03 =M&AuthenticationResult=Y&CAVVValue=jGqyM3D&ECIIndicator=02&TransactionStain=AgAA3D&Origin alResponseCode=00&Signature=vnt3D&SignatureMethod=SHA1 【参考方案1】:

响应消息签名验证

Authorize3DSResponse 操作响应返回验证哈希Signature,带有 批准和拒绝授权交易,以验证响应来自 FAC 的系统。

要使用此Signature 作为验证,请从此中的以下字段创建一个 BASE-64 编码的 SHA1 哈希 顺序:

处理密码 (a1B23c) FAC ID (1234567890) 收单方 ID (464748) 订单 ID (FACTEST01)

例如: a1B23c1234567890464748FACTEST01

产生的哈希值:LOijfhLT2JO2jYaA1bXPIZNWDPg=

 using System.Security.Cryptography;

 private string ComputeHash(string Key)
 
     SHA1CryptoServiceProvider objSHA1 = new SHA1CryptoServiceProvider();
     objSHA1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(Key.ToCharArray()));
     byte[] buffer = objSHA1.Hash;
     string HashValue = System.Convert.ToBase64String(buffer);
     return HashValue;
 

参考:First Atlantic Commerce Payment Gateway 2 Integration Guide for Developers

【讨论】:

将计算得到的hash 值与查询字符串中收到的Signature 进行比较。如果匹配,则来自 FAC 的系统。 谢谢。答案对我有帮助

以上是关于防止将响应值发布到 asp.net 页面而不是支付网关方式的主要内容,如果未能解决你的问题,请参考以下文章

防止 FormsAuthenticationModule 拦截 ASP.NET Web API 响应

从 runat 服务器 asp.net 内部添加

在 asp.net webservices 中使用 jQuery AJAX 总是出错:而不是成功:

asp.net如何把表单提交到别的页面而不是本页面,用POST方式

ASP.NET 支付表单提交需要指导

ASP.NET 网页的重定向和传值