Paypal IPN bildirimlerin php script koruyun

7 Cevap php

Web siteme ben IPN bildirimi almak bir php script entegre ettik ve müşteriye bir lisans anahtarı göndermek! Bu script nasıl bu klasör koruyabilirim php script tarafından gerekli görülen diğer 2 php dosyaları ile bir klasörde ... var? :. Ben bunun bir htaccess koyarsanız

order allow,deny
deny from all

Ben de paypal bildirimleri engellemek!

Ben nasıl koruyabilirim? Ben gerek var mı?

7 Cevap

Güvenle Sadece IP adresleri aşağıdaki listeye IPN komut erişimi sınırlayabilirsiniz:

216.113.188.202
216.113.188.203
216.113.188.204
66.211.170.66

Bu, aşağıdaki şekilde yapılabilir:

if (!in_array($_SERVER['REMOTE_ADDR'],array('216.113.188.202','216.113.188.203','216.113.188.204','66.211.170.66')) {
header("HTTP/1.0 404 Not Found");
exit();
}

Bu şekilde SADECE Paypal IPN komut dosyası erişmek mümkün olacak.

IP adresi bu liste yıldır oldukça istikrarlı olmuştur. Paypal yeni bir adres eklerse durumda, e-posta ve el gibi durumlarda yorumlayan raporlama ekleyebilirsiniz.

Yapabileceğiniz birçok şey var:

  1. Kolayca tahmin edilebilir olmadığını böylece komut dosyası bilinmeyen bir ad verin.
  2. Klasöründe dizin listeleri devre dışı
  3. Arama sitesi paypal.com (veya ilişkili IP adresi vb) olup olmadığını kontrol edin

PayPal komut denemek kullanacak hangi IP biliyorsanız:

order deny, allow
deny from all
allow from [Paypal-IP]

Paypal aynı IP'den her zaman gelen istekleri tutacak emin olamaz çünkü ben tüm IP'ler kapatarak tavsiye etmem. Onlar hiç kendi IP aralığını değiştirmek için karar verirseniz, kurulum muhtemelen size haber verilmeden, kıracak.

Ben Paypal isteğini işler script işlemek için bir yer olduğunu düşünüyorum - bu komut size isteği gerçekten Paypal geliyor emin olmak gerekir. Sen ileri sürülmüştür gibi kolay tahmin edilmez bazı karanlık URL'sini kullanarak bunu yapabilirsiniz.

Kurmak için biraz zor olsa da, sen istek aslında Paypal geldiğini kontrol daha iyi bir yol var, bu yol - Eğer mümkünse, IPN için paylaşılan gizli kurulum içine bakmak.

Bu yardımcı olur umarım!

neden bunu yapmaya çalışıyorsun?

IPN sisteminde, ilk sadece cURL veya fshock ya da ne kadar ... Eğer geçerli bir işlem olmadığını söylemek ya da edemiyor tepki içine bakarak ... Birisi yapamam kullanarak geri paypal için ipn komut geçirilen değişkenleri sıçrama paypal kendisi var olmayan sahte bir işlem değişken ... bütün yaptıkları bu paypal sizin script Başarılı bir ödeme olduğunu varsayarak olacak varolduğundan beri .. sizin komut kandırmak için yine eski bir işlem bilgisi tekrar etmektir ...

böylece sadece veritabanına karşı txn_id karşılaştırarak bu önleyebilirsiniz ve zaten veritabanında varsa bu birileri zaten Kaydedilen işlemin bilgileri kullanarak sizi aldatmaya çalışıyor demektir ...

Bu IPN komut dosyası çağırın olanlar umurunda kontrolleri yapmak beri paypal ve veritabanına karşı değişkenlerini kontrol beri ... onlar için çalışıyor alışkanlık ...

herhangi bir istisna bunları anlatmak için güzel bir cümle çıktı "Bu script sağlamdır! Dont bizi aptal deneyin!"

Go canlı denetim listesini Çıkış:

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_golivechecklist

(Geliştirici Ana Sayfa> Nasıl> API> Go Live Kontrol Listesi)

izin ip adresi listesi için

Şimdi ben bunu ettik:

. php script ve ben 2 yapılandırma dosyaları taşındı ve ben aşağıdaki kod ile bir htaccess yerleştirilen ettik nerede başka bir klasör oluşturduk 2 yapılandırma dosyaları depolandığı klasörde:

order allow,deny
deny from all

Now the 2 config files have a good protection! ... but not the script that receive the notifications! If I try to block the directory listing( for the folder that contains the php script and the config folder) with:

IndexIgnore *

Paypal sandbox bana bir hata 500 veriyor!

Yani Senaryoyu korumak için yapabileceğiniz tek şey bildirimleri paypal.com gelen doğrulamak bir durum, onun kafasına, bir yere mi?

Sonunda ben php script kafasına ekledik bir uzak ana bilgisayar adına göre ifadesi ise:

 $remote_host = gethostbyaddr($_SERVER['REMOTE_ADDR']);

Birisi ilgilenen varsa, o $_SERVER['REMOTE_HOST'] sorgulamak da mümkün ama sunucuda httpd.conf dosyasını yapılandırılmalıdır.