Wie kann ich bestätigen, dass eine PayPal IPN POST-Anfrage an meine angegebene notifyURL tatsächlich von PayPal kommt?
Ich meine nicht, die Daten mit denen zu vergleichen, die ich früher gesendet habe, aber wie kann ich überprüfen, ob die Server / IP-Adresse, von der diese PayPal-Anfrage stammt, tatsächlich gültig ist?
Das IPN-Protokoll besteht aus drei Schritte:
- PayPal sendet Ihren IPN-Hörer a Nachricht, die Sie über das Ereignis benachrichtigt
- Ihr Hörer sendet das komplette unveränderte Nachricht zurück zu PayPal; das Die Nachricht muss dieselben Felder enthalten in der gleichen Reihenfolge und in codiert werden genauso wie die ursprüngliche Nachricht
- PayPal sendet ein einzelnes Wort zurück, welches ist entweder bestätigt, wenn die Nachricht ursprünglich mit PayPal oder INVALID wenn Es gibt eine Diskrepanz zu dem was war ursprünglich gesendet
Dies ist der einfachste Weg, den ich gefunden habe, auch nach PayPal. Ich verwende http_build_query (), um die URL aus dem Post zu erstellen, der von paypal an die Site gesendet wurde. Paypal docs besagt, dass Sie das zur Bestätigung zurücksenden sollten, und das machen wir mit file_get_contents. Sie werden feststellen, dass ich strstr verwende, um zu überprüfen, ob das Wort "VERIFIZIERT" vorhanden ist, und so setzen wir die Funktion fort, wenn wir nicht false zurückgeben ...
%Vor%Wenn ich mich richtig erinnere, verwendet PayPal eine statische IP für seine IPN-Anrufe.
Die Überprüfung der korrekten IP sollte also funktionieren.
Alternativ können Sie gethostbyaddr
oder gethostbyname
.
Tags und Links php security paypal paypal-ipn