Как обеспечить соответствие PCI для запросов HTML и Ajax - PullRequest
0 голосов
/ 18 июня 2020

Я интегрирую eWay платежный шлюз в PHP с регулярным платежом. Это для региона Австралии. Я подготовил следующую форму 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 = 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
}

это форма жалобы PCI или мне нужно сделать что-то еще для нее? Я уже сделал следующее

  1. Я не сохраняю данные кредитной карты в своей базе данных. Он используется только для вызова API eWay и возврата мне токена, который используется для сохранения в БД.
  2. SSL интегрирован.
  3. Хостинг-провайдер обеспечил соответствие аппаратного и программного обеспечения.

Пожалуйста, помогите и предложите!

1 Ответ

4 голосов
/ 18 июня 2020

На стороне сервера я использую приведенный ниже код. Я не сохраняю данные карты в своей базе данных, она используется только для вызова стороннего API:

Там достойное резюме всего процесса и блок-схема для определения того, какое решение применимо к вам здесь . К сожалению для вас, если номер кредитной карты касается вашего сервера в читаемой форме (т.е. не зашифрованной), вам придется иметь дело с SAQ-D, , даже если вы нигде не сохраняете его . Вот ссылка на SAQ-D ... все 329 вопросов, которые вам понадобятся, чтобы вы могли сказать, что вы изучили и определили, что соблюдаете, начиная с построения и поддержания безопасной сети. Вы можете пометить разделы как неприменимые (например, потому что это касается хранения номеров карт, а вы ничего не храните), но многие из них все равно будут актуальными.

Это, вероятно, намного больше, чем вы готовы взять на себя.

Альтернативы, к которым стремятся большинство продавцов электронной коммерции, - это квалификация SAQ-A или SAQ -A-EP (22 и 191 вопрос соответственно), или зашифровать данные держателя карты в браузере пользователя до того, как они отправятся куда-либо, используя метод, который вы не можете отменить.

обращайтесь к своему платежному процессору, чтобы узнать, какие решения для интеграции электронной коммерции они рекомендуют. Согласно этому руководству по API (которое может быть тем, которое вы используете, а может и не быть), они предоставляют кнопку «Оплатить сейчас», прозрачное перенаправление и несколько вариантов для встраивания своих элементов управления на вашу страницу, чтобы что данные никогда не доходят до вас.

Для их API «Прямого подключения», который, похоже, вы используете, они явно говорят:

Поскольку данные карты передаются через сервер, необходимо использовать одно из следующих действий для обеспечения соответствия правилам данных карты:

  • Предоставить eWAY подтверждение соответствия PCI-DSS среды продавца
  • Использовать шифрование на стороне клиента для зашифровать данные карты в браузере клиента
  • Используйте безопасные поля для сбора данных карты, затем используйте SecuredCardData для завершения транзакции
...