Динамическое шифрование кнопки Paypal - PullRequest
17 голосов
/ 05 ноября 2010

Я разрабатываю сайт заказа с использованием PHP и Mysql. На последнем этапе пользователю предоставляются кнопки Paypal для оплаты сделанных им заказов. Итак, Имя элемента, Значение являются переменными. Эти значения являются переменными, я не могу использовать зашифрованную кнопку от Paypal. Мне придется использовать незашифрованную кнопку или зашифровать ее перед тем, как показывать ее пользователю.

Я хочу зашифровать его из соображений безопасности. Я хотел бы знать, как это сделать на моем сервере.

Ответы [ 6 ]

31 голосов
/ 31 июля 2011

То, что вам нужно сделать, довольно сложно, во-первых, кнопки ввода, шифрованные PayPal имеют следующую раскладку:

    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIIEQYJKo...Encrypted stuff...IF5ioje8JH0LAA+5U7P+tabAMOL37k=-----END PKCS7-----">
<input type="image" src="https://www.paypalobjects.com/es_XC/MX/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal, la forma más segura y rápida de pagar en línea.">
<img alt="" border="0" src="https://www.paypalobjects.com/es_XC/i/scr/pixel.gif" width="1" height="1">
    </form>

Поле cmd указывает зашифрованную кнопку «Купить сейчас» (проверьте значения для кнопок, которые вы хотите создать), а зашифрованное поле - это фактическое содержимое кнопки в следующем макете:

    cert_id=ZQCMJTZS27U4F
    cmd=_xclick
    business=contact@mybiz.com
    item_name=Handheld Computer
    item_number=1234
    custom=sc-id-789
    amount=500.00
    currency_code=USD
    tax=41.25
    shipping=20.00
    no_note=1
    cancel_return=http://www.company.com/cancel.htm 

Обратите внимание, что они в формате пары = значение, для полной ссылки смотрите здесь: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables.

Теперь теория, чтобы получить зашифрованное поле, хорошо зашифрованное, вам нужно подписать эти значения вашим сертификатом (сертификатом x509) и вашим закрытым ключом, а затем вам необходимо зашифровать это подписанное сообщение с помощью открытого сертификата PayPal.

Переходя к практике, для этого вы можете (нужно) использовать следующие две функции PHP (часть расширения OpenSSL): openssl_pkcs7_sign и openssl_pkcs7_encrypt.

Мне показалось, что эту последнюю часть очень сложно настроить, поэтому я рекомендую вам загрузить PHP SDK для PayPal здесь: https://www.x.com/community/ppx/sdks#WPST и прямо здесь: https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_WPS_Toolkit.zip, этот SDK поставляется с классом EWPServices кто содержит метод encryptButton, который довольно просто дает вам зашифрованную кнопку; если вы хотите посмотреть на кости, посмотрите в классе PPCrypto, который предлагает вам метод signAndEncrypt, который дает вам только зашифрованную строку, необходимую для поля, и показывает процесс шифрования кнопки.

Кстати, если вы не знаете, как получить свой сертификат и свой закрытый ключ (и / или сертификат Paypal), посмотрите здесь: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_encryptedwebpayments#id08A3I0N30Y4

4 голосов
/ 01 августа 2011

Из вашего поста вы, похоже, очень озадачены тем, что означает шифрование и к чему его применять.Какова модель угрозы?(т. е. как это можно подорвать).

Не следует ожидать, что PayPal всегда будет обрабатывать заказ, отправленный вами в браузер клиента.Вы ДОЛЖНЫ проверить, что именно PayPal делал.

Вы можете быть лучше уверены в целостности заказа после того, как он покинет ваш сайт, например, добавив хэш заказа к номеру заказа (и соль!)отправить в Paypal.Это должно позволить вам проверить заказ без ссылки на PLU / сохраненный заказ (если сценарий, обрабатывающий возврат из PayPal, знает соль).

2 голосов
/ 27 сентября 2011

Я разработал инструментарий интеграции PHP с PayPal Website Payments Standard .

Все упомянутые здесь проблемы решаются внутри вспомогательными классами.Некоторые основные конфигурации предоставляются для легкой настройки.Например, все переменные шифрования (ваш закрытый ключ, открытый сертификат, ...) и подлежат настройке.В статье подробно объясняется, как использовать классы.

PS: вспомогательные классы реализуют только подтверждение IPN.

2 голосов
/ 27 июля 2011

возможно, вы можете попробовать поместить эти переменные во временную таблицу с уникальным идентификатором.затем используйте этот идентификатор для кнопок.запрашивать переменные из таблицы всякий раз, когда клиент нажимает кнопки PayPal.Я просто надеюсь, что правильно понял ваше утверждение xD

1 голос
/ 29 июля 2011

Единственный способ сделать это - динамически запрашивать у PayPal шифрование кнопки каждый раз.

Однако этот метод неэффективен, я думаю, что было бы намного лучше использовать PayPal IPN. Есть много примеров и классов онлайн о том, как это сделать.

0 голосов
/ 04 февраля 2017

Не мог ли кто-нибудь с вашим адресом электронной почты PayPal выслать вам поддельный счет с запросом названий продуктов по неправильным ценам?Если у них возникнут проблемы с изменением вашего js / html-кода для отправки вам поддельной накладной ... они могут просто написать свою собственную (просто отправьте форму в paypal.com/cgi-bin/webscr).Все, что вам действительно нужно, это электронная почта продавца, верно?

Так почему все проблемы с шифрованием кнопок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...