如何确保 HTML 和 Ajax 请求符合 PCI 标准

Roh*_*tal 0 php ajax payment-gateway pci-compliance

我正在将eWayPHP 中的支付网关与定期支付集成在一起。它适用于澳大利亚地区。我准备了以下HTML表格:

<form action="submit.php" method="post" id="signup-form" class="creditly-card-form agileinfo_form">
    <div class="signup-form credit-wrapper">
        <div class="control full-flex">
            <div class="form-control first">
                <input type="email" name="email" id="email" placeholder="Email Address"/>
            </div>
            <div class="form-control last">
                <input type="text" name="username" id="username" placeholder="Username"/>
            </div>
        </div>

            <div class="control full">
            <div class="form-control">
                <input type="text" name="cardholder_name" id="cardholder_name" placeholder="Name On Card" class="billing-address-name form-control"/>
            </div>
        </div>
        <div class="control full">
            <div class="form-control">
                <div class="card-type"></div>
                <input type="text" name="cardnumber" id="cardnumber" pattern="(\d*\s){3}\d*" class="credit-card-number form-control" autocomplete="cc-number" autocompletetype="cc-number" x-autocompletetype="cc-number" />
            </div>
        </div>
        <div class="control full-flex">
            <div class="form-control first">
                <input type="text" class="security-code form-control" name="cardcvv" id="cardcvv" inputmode="numeric" pattern="\d*" placeholder="CVV" />
            </div>
            <div class="form-control last">
                <input type="text" name="expiredate" id="expiredate" placeholder="MM / YY" class="expiration-month-and-year form-control"/>
            </div>
        </div>
        <div class="control full">
            <input type="submit" class="submitbtn credit-wrapper-submit" value="Submit"/>
            <!--<button class="submitbtn credit-wrapper-submit" type="submit"><span>Submit</span></button>-->
        </div>
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

我用来jQuery在提交按钮单击时提交表单,请参阅:

$("#signup-form").submit(function(e){
    e.preventDefault();
    var formData = $(this).serialize();
    showLoader();
    $.ajax({
        url: "php/submit-signup.php",
        method: "POST",
        dataType: "json",
        data: {
            formdata: formData
        },
        success: function(data) {
            hideLoader();
            if (data.status) {
                showsweetSuccessPopup(data.message);
            } else {
                showsweetErrorPopup(data.message);
                return false;
            }
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

在服务器端,我使用下面的代码。我没有在我的数据库中保存卡的详细信息,它仅用于第三方 API 调用: $formData = array(); parse_str($_POST['formdata'], $formData);

if (isset($formData['username'])) {
    $client = \Eway\Rapid::createClient($this->apiKey, $this->apiPassword, $this->apiEndpoint);

    $customer = [
        'Email' => $formData['email'],
        'CardDetails' => [
            'Name' => $formData['cardholder_name'],
            'Number' => $formData['cardnumber'],
            'ExpiryMonth' => $formData['expiryMonth'],
            'ExpiryYear' => $formData['expiryYear'],
            'CVN' => $formData['cardcvv'],
        ]
    ];

    $apiResult = $client->createCustomer(\Eway\Rapid\Enum\ApiMethod::DIRECT, $customer);

    //further code
}
Run Code Online (Sandbox Code Playgroud)

是 PCI 投诉表还是我应该为此做些什么?我已经做了以下事情

  1. 我没有在我的数据库中保存信用卡详细信息。它仅用于调用 eWay api 并将用于保存在数据库中的令牌返回给我。
  2. SSL 已集成。
  3. 托管服务提供商确保硬件和软件合规。

请帮助和建议!

Bob*_*son 5

在服务器端,我使用下面的代码。我没有在我的数据库中保存卡的详细信息,它仅用于第三方 api 调用:

有整个过程的一个体面的总结和确定哪些方案适用于您的流程图这里。对您来说不幸的是,如果信用卡号以可读形式(即未加密)访问您的服务器,那么您将需要处理 SAQ-D,即使您没有将其保存在任何地方这是SAQ-D的链接……从构建和维护安全网络开始,您需要能够说明您已经检查并确定您遵守了所有 329 个问题。您可以将部分标记为不适用(例如,因为它涵盖了卡号存储并且您没有存储任何内容),但其中很多内容仍然是相关的。

不过,这可能比你愿意承担的要多得多。

大多数电子商务商家的目标是获得SAQ-ASAQ-A-EP(分别为 22 和 191 个问题)的资格,或者使用某种方法在用户浏览器中的持卡人数据到达任何地方之前对其进行加密你无法逆转。

您应该联系您的支付处理商,看看他们推荐的电子商务集成解决方案是什么。根据此 API 指南(可能是也可能不是您正在使用的指南),它们提供了“立即付款”按钮、透明重定向以及用于将其控件嵌入您的页面的几个选项,以便数据永远不会到达您的手中.

对于看起来您正在使用的“直接连接”API,他们明确表示:

由于卡数据是通过服务器传递的,因此必须使用以下方法之一来确保符合卡数据规定:

  • 向 eWAY 提供商家环境的 PCI-DSS 合规性证明
  • 使用客户端加密对客户浏览器上的卡数据进行加密
  • 使用 Secure Fields 收集卡数据,然后使用 SecuredCardData 完成交易