Достаточно ли безопасен протокол аутентификации PayPal IPN? - PullRequest
0 голосов
/ 10 июня 2018

Как и многие из нас, я внедряю решение PayPal.Читая документацию для разработчиков, я понимаю, что IPN - это протокол асинхронных сообщений, который запускает выполнение платежей.

PayPal имеет официальный способ реагирования на эти сообщения и проверки происхождения сообщений IPN на вашемСлушатель IPN.Каждое сообщение IPN, полученное слушателем от PayPal, содержит заголовок запроса HTTPS User-Agent со значением IPN PayPal (https://www.paypal.com/ipn) . Они подчеркивают, что не использует этот заголовок дляубедитесь, что IPN действительно пришел от PayPal и не был подделан.Скорее, чтобы проверить эти вещи, вы должны использовать протокол аутентификации IPN, описанный ниже, который состоит из четырех шагов:

  1. PayPal HTTPS POST отправляет сообщение IPN вашему слушателю, который уведомляет его о событии.
  2. Ваш слушатель возвращает пустой ответ HTTP 200 в PayPal.
  3. Ваш слушатель HTTPS отправляет полное, неизмененное сообщение обратно в PayPal;сообщение должно содержать те же поля (в том же порядке), что и исходное сообщение, и должно быть закодировано так же, как и исходное сообщение.
  4. PayPal отправляет обратно одно слово - либо ПРОВЕРЕНО (если сообщение соответствуетOriginal) или INVALID (если сообщение не соответствует оригиналу).

Шаги 2, 3, 4 и 5 на приведенной ниже схеме показывают этот протокол.

PayPal IPN Authentication flow

Как вы можете видеть выше, они рекомендуют что-то, что отвечает одним [ПРОВЕРЕНО] из сообщения [НЕВЕРНЫЙ], чтобы предотвратить мошенничество.

Я думаю, чтоЛюбой имитатор IPN может отправить слушателю сообщение о состоянии «ПРОВЕРЕНО», так что это не имеет смысла.Поэтому мои вопросы:

  • Это решение действительно безопасно?
  • если нет, то какой подход действительно может предотвратить мошенничество и обеспечить выполнение платежа?

Интересно, если бы мы могли обменять секретный ключ, он был бы более надежным.

Все мысли приветствуются.Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

Безопасность этого процесса зависит от того, отправляете ли вы запрос подтверждения в PayPal , а не злоумышленнику, что можно сделать, просто установив соответствующий URL-адрес, а не извлекая его из запроса.

Почему они просто не просили вас полагаться на проверку подлинности сертификата клиента, это другой вопрос, но ему уже 20 лет, и он даже тогда плохо спроектирован.

0 голосов
/ 10 июня 2018

Безопасность протокола зависит от проверки сертификата TLS PayPal.

Поскольку некоторые ЦС не смогли проверить, кому они выдавали сертификаты, вы не можете полагаться на проверку через ЦС.Вы должны хранить список сертификатов PayPal, которым вы доверяете.Затем убедитесь, что используемый сертификат находится в списке при подключении.Далее выберите метод шифрования достаточной силы.

...