PHP cURL - 处理信用卡交易时的安全性

Posted

技术标签:

【中文标题】PHP cURL - 处理信用卡交易时的安全性【英文标题】:PHP cURL - Security When Processing Credit Card Transaction 【发布时间】:2012-07-29 17:18:54 【问题描述】:

我正在使用由处理器提供的信用卡处理器脚本,它接收各种信用卡数据和商家帐户数据,获取 cURL,并解析返回的 XML 以获取交易状态。

代码:

define("CURL_PROCESSING_URL", "https://ideposit.vbprograms.net/servlet/pg");

$params =   "Merchant_User_Name=" . "vitale" .
            "&Merchant_Password=" . "test" .
            "&Tracking_Number=" . "00001" .
            "&Credit_Card_Number=" . "4012888888881" .
            "&Credit_Card_Exp_Date=" . "1205" .
            "&Charge_Amount=" . "12.00" .
            "&AVS_Street=" . "8320" .
            "&AVS_Zip_Code=" . "85284" .
            "&CV_Security_Code=" . "999" .
            "&Credit_Card_Type=" . "MC_CARD_VISA" .
            "&CardHolder_Name=" . "test Card Holder";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, CURL_PROCESSING_URL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$returned = curl_exec($ch);
curl_close($ch);

$p = xml_parser_create();
xml_parse_into_struct($p, $returned, $vals, $index);
xml_parser_free($p);

问题:

1) SSL_VERIFYPEER 设置为 false 是否更容易欺骗服务器和拦截交易数据?

2) cURL URL 和相关的 POST 值是存储在服务器日志中还是以纯文本形式传输?

3) 是否有更安全的方式或一组选项来执行此交易?

【问题讨论】:

作为旁注。 https://ideposit.vbprograms.net 没有有效的证书,设计非常糟糕和过时的网站,并且他们没有提供任何有关其业务的识别信息。在使用他们的服务之前,我会三思而后行。 虽然我同意您的观点,即考虑不周,但即使在我的警告下,客户仍坚持使用该供应商。 “正确”的站点应该是 ideposit.net,但他们要求我们通过 vbprograms.net 子域传递所有 API 调用。很奇怪。 【参考方案1】:

我认为在生产环境中,您可能希望使用默认值 CURLOPT_SSL_VERIFYPEER = true。这将验证 SSL 证书是否有效。对于测试或开发环境,处理器可能会为您提供一个沙箱以供您使用,该沙箱可能具有自签名证书或过期证书或类似证书,您可能会认为这是错误的。

您使用的是 SSL,因此数据不会以纯文本形式发送。在不知道您有什么样的错误日志记录的情况下,很难说它是否会存储在服务器日志中。

假设您始终使用 SSL 并且不记录敏感数据,cURL 完全可以满足您的要求。

【讨论】:

以上是关于PHP cURL - 处理信用卡交易时的安全性的主要内容,如果未能解决你的问题,请参考以下文章

中行信用卡3D认证是啥?

应用程序中的安全信用卡交易

电子商店,处理信用卡和贝宝[关闭]

网上购物 – 信用卡处理UML用例图示例

如何在 PHP 中的页面之间安全地传递信用卡信息

ATM信用卡程序