【问题标题】:How to ensure PCI Compliant for HTML and Ajax request如何确保 HTML 和 Ajax 请求符合 PCI 标准
【发布时间】:2020-06-18 07:52:32
【问题描述】:

我正在将 PHP 中的 eWay 支付网关与定期支付集成。它适用于澳大利亚地区。我准备了以下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>

我使用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;
            }
        }
    });
});

在服务器端,我使用以下代码。我没有在我的数据库上保存卡详细信息,它仅用于第三方 api 调用: $formData = 数组(); 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
}

是 PCI 投诉表还是我应该为它做其他事情?我已经做了以下事情

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

请帮助和建议!

【问题讨论】:

  • 您应该通过验证器传递表单输入以检查字符串、位数等
  • 我已经在这部分应用了服务器端和客户端验证。我没有包含该代码,因为它可能会增加内容长度。
  • 好吧,那么我认为这里没有其他事情可做,请咨询您的支付网关提供商,看看他们的文档中是否有任何内容
  • 理想情况下,您需要将付款直接从用户浏览器发送到支付网关。事实上,您的服务器在范围内并且需要符合要求。根据正在处理的交易数量,有不同级别的合规性,但是如果您的卡详细信息通过您的服务器,您需要确保它得到适当的控制——访问控制到位,源代码可能经过审查/外部审查等,它是一项正在进行的工作。 (来源:我搭建全球PCI DSS Level 1认证平台)
  • 如果请求绝对必须通过您的服务器,因为您同时使用其他数据,看起来 eWay 提供了client side encryption option,这意味着您的服务器上的卡详细信息不可读,将其排除在范围之外。

标签: php ajax payment-gateway pci-compliance


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 2012-01-18
    • 2011-10-31
    • 2017-03-11
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多