Подтвердить что ты не робот

Динамическое шифрование кнопки Paypal

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

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

4b9b3361

Ответ 1

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

Ответ 2

Что вам нужно сделать, это довольно сложно, во-первых, кнопки ввода, зашифрованные 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
    [email protected]
    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_ID = разработчик /e_howto_html_encryptedwebpayments # id08A3I0N30Y4

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

Итак, почему все проблемы с зашифровкой кнопок?