PayPal IPN отправляет запрос POST с переменным количеством полей к уведомлять URL, чтобы подтвердить, что запрос POST законен, мы должны повторно отправить тот же запрос наряду с дополнительным cmd=_notify-validate
поле к PayPal, который затем отвечает VERIFIED
или INVALID
.
Мой вопрос, почему мы должны снова послать запрос PayPal? Разве что-то вроде этого не было бы достаточно?
if (preg_match('~^(?:.+[.])?paypal[.]com$~i', gethostbyaddr($_SERVER['REMOTE_ADDR'])) > 0)
{
// request came from PayPal, it's legit.
}
Эквивалентность мы можем доверять серверу для корректного разрешения дюйм/с, я предполагаю, что мы можем доверять всем запросам из PayPal, нет?
PayPal просто обеспечивает более высокий стандарт безопасности для вашего собственного сайта / приложения.
Подмена IP-адреса может легко обмануть ваш пример функции, поскольку использование одного только REMOTE_ADDRESS
весьма уязвимо для атак.
Когда вы работаете с финансовыми транзакциями, безопасность имеет большое значение. Если я могу подделать запрос IPN, я могу обманом заставить ваш сайт / приложение выполнять ложные транзакции. Отправляя дополнительный запрос в известное и надежное место, мы получаем гораздо более высокий стандарт учетных данных, на основании которого можно действовать. В этом подтверждении отправляется весь исходный запрос IPN, чтобы PayPal мог проверить, что все детали транзакции действительно действительны, тем самым предотвращая атаку Man-in-the-Middle, при которой злоумышленник изменяет детали (например, изменяет цену или количество ) действительного запроса, отправленного из PayPal на ваш сервер.
Вот причина для ответа на POST, из IPN Guide:
Ваш слушатель должен отвечать на каждое сообщение. сообщение, независимо от того, собираетесь ли вы что-либо с ним делать. Если вы не ответили, PayPal считает, что сообщение не было получено и повторно отправляет сообщение. PayPal продолжает периодически отправлять сообщение повторно, пока ваш слушатель не отправит правильное сообщение обратно, хотя интервал между повторными сообщениями увеличивается с каждым раз.
IMPORTANT: PayPal ожидает получить ответ на сообщение IPN в течение 30 секунд.