Если пользователь не пришел ЗДЕСЬ, то не обрабатывать - Как? - PullRequest
0 голосов
/ 30 октября 2010

Я пытался использовать $_SERVER, но у меня это не сработало.

Что мне нужно, это:

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

Как я могу это сделать?

Я попробовал следующее:

 $url = 'paypal';
 if(strstr($_SERVER['HTTP_REFERER'], $url)) {
     // my code
 } else {
    // my error
 }

Это не сработало для меня, как я могу заставить это работать, пример ссылки из PayPal (это довольно долго):

https://www.paypal.com/us/cgi-bin/webscr?cmd=_flow&SESSION=39QzTUoR0GugSwdZjeJ5zf4EkFIa2-rlRsdrqxfx4O3ibIMuzY3Eab7y6Dq&dispatch=5885d80a13c0db1f8e263663d3faee8dc60d77e6184470d515cedf52660ea0cd

Пожалуйста, помогите, это уязвимость для того, над чем я работаю.

Ответы [ 5 ]

5 голосов
/ 30 октября 2010

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

Вам следует воспользоваться услугой Уведомление о мгновенном платеже PayPal и внедрить для этого слушателя.PayPal имеет пример кода для этого на разных языках.Это краткий обзор протокола IPN:

  1. PayPal отправляет слушателю IPN сообщение, уведомляющее вас о событии (например, о полученном платеже).

  2. Ваш слушатель отправляет полное неизмененное сообщение обратно в PayPal;сообщение должно содержать те же поля в том же порядке и быть закодировано так же, как и исходное сообщение.

  3. PayPal отправляет обратно одно слово, равное VERIFIED, еслисообщение отправлено с PayPal или INVALID, если есть расхождение с тем, что было отправлено.

  4. После проверки IPN вы можете разблокировать функции / опции, за которые заплатили ваши пользователи, как предложил @ cHao в другом ответе .

Подробнее:

1 голос
/ 30 октября 2010

Честно говоря, если вы думаете

 $url = 'paypal';
 if(strstr($_SERVER['HTTP_REFERER'], $url)) {
   // my code
 } else {
   // my error
 }

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

Если вы все еще хотите сделать это самостоятельно, прочитайте о PayPal IPN здесь .

1 голос
/ 30 октября 2010

Ссылки не являются надежными. Они блокируются или заменяются довольно часто. А пользовательский клиент может заменить их на все, что захочет.

Вы доверяете клиенту, который не прав.

Вам необходимо получить подтверждение непосредственно от PayPal, или PayPal должен предоставить пользователю неподдерживаемый токен.

И вам также необходимо подтвердить сумму платежа. В противном случае пользователь может заплатить только 1 цент.

1 голос
/ 30 октября 2010

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

Вам лучше прослушивать сообщения IPN от Paypal и использовать их для разблокировки функций, за которые люди заплатили.Может быть небольшая задержка, но обычно она очень короткая.Обычно к тому времени, когда пользователь приходит в норму, «спасибо за ваш заказ!»и щелкнув ссылку, чтобы получить доступ к тому, что они купили, IPN прошел.

0 голосов
/ 30 октября 2010

Может быть, этот фрагмент поможет вам по номеру http://www.snipplr.com/view/41575/process-paypal-response/, а код запроса доступен по адресу http://www.snipplr.com/view/41574/paypal-xclick-payment/

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