Question

Dans mon site, je l'ai intégré un script php qui reçoivent une notification IPN et envoyer une clé de licence au client. Ce script est dans un dossier avec d'autres 2 fichiers php requis par le script php ... Comment puis-je protéger ce dossier? Si je place en elle une .htaccess avec:

order allow,deny
deny from all

Je bloque les notifications paypal aussi.

Comment puis-je protéger? Ai-je besoin?

Était-ce utile?

La solution

Vous pouvez en toute sécurité limiter l'accès à votre script IPN uniquement dans la liste suivante des adresses IP:

216.113.188.202
216.113.188.203
216.113.188.204
66.211.170.66

Cela peut se faire de la manière suivante:

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();
}

De cette façon seulement Paypal sera en mesure d'accéder au script IPN.

Cette liste d'adresse IP a été plutôt stable depuis des années. En cas si Paypal ajoute une nouvelle adresse, vous pouvez ajouter des rapports au courrier électronique et examiner ces cas manuellement.

Autres conseils

Il y a beaucoup de choses que vous pouvez faire:

  1. Donnez votre script un nom obscur afin qu'il ne soit pas facile à deviner.
  2. Désactiver les listes de répertoires dans le dossier
  3. Vérifiez si le site d'appel est paypal.com (ou l'adresse IP associée etc.)

pourquoi vous essayez de le faire?

dans le système IPN, vous devez d'abord simplement rebondir les variables qui sont passés à votre script IPN retour à paypal en utilisant cURL ou fshock ou ce que jamais ... regarder dans la réponse que vous pouvez dire si elle est une transaction valide ou non ... quelqu'un une variable de transaction ne peut pas faux qui n'existe pas dans paypal lui-même ... tout ce qu'ils peuvent faire est de réutiliser une information de transaction plus nouveau pour tromper votre script .. car il existe sur paypal votre script sera en supposant que c'est un paiement successfull ...

de sorte que vous pouvez empêcher cela juste en comparant txn_id contre votre base de données et si elle existe déjà dans votre base de données, cela signifie que quelqu'un essaie de vous tromper en utilisant une information sur vos transactions déjà enregistré ...

puisque vous faites ces contrôles qui se soucie de ceux qui appellent ce script IPN ... il ne sera pas travailler pour eux, car vous vérifiez les variables contre paypal et votre base de données ...

dans toutes les exceptions imprimer une phrase bien de leur dire « Ce script est robuste! Ne pas essayer de nous tromper! »

Si vous connaissez l'adresse IP à partir de laquelle PayPal utilisera l'essai de script:

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

Je ne recommanderais pas fermer toutes les adresses IP, puisque vous ne pouvez pas être sûr que Paypal gardera les demandes provenant de la même adresse IP tout le temps. Si jamais ils décident de changer leur gamme IP, votre installation se brisera, probablement sans notification pour vous.

Je pense que le script qui traite la demande Paypal est l'endroit idéal pour gérer cela - dans ce script, vous devez vous assurer que la demande est en réalité à venir de Paypal. Vous pouvez le faire en utilisant une URL obscure qui est difficile à deviner comme cela a été suggéré.

Si possible, regardez dans la configuration secret partagé pour IPN -. De cette façon vous avez une meilleure façon de vérifier que la demande est en réalité à venir de Paypal, mais il est un peu plus difficile à mettre en place

Hope this helps!

Consultez la liste de contrôle en direct aller:

https://cms.paypal.com / nous / cgi-bin /? cmd = _render-content & content_id = développeur / howto_api_golivechecklist

(développeur Accueil> Comment> API> Go en direct Liste)

pour une liste d'adresse IP pour permettre

Maintenant, j'ai faire ceci:

dans le dossier où est stocké le script php et les 2 fichiers de configuration que j'ai créé un autre dossier dans lequel je me suis déplacé les 2 fichiers de configuration et où je l'ai placé un .htaccess avec le code suivant:

order allow,deny
deny from all

Maintenant, les 2 fichiers de configuration ont une bonne protection! ... mais pas le script qui reçoivent les notifications! Si je tente de bloquer la liste des répertoires (pour le dossier qui contient le script php et le dossier de configuration) avec:

IndexIgnore *

Le bac à sable paypal me donne une erreur 500!

La seule chose que je peux faire pour protéger le script est de placer, sur la tête de celui-ci, une condition qui vérifient les notifications proviennent de paypal.com?

Enfin, j'ai ajouté sur la tête du script php une instruction if basée sur le nom de l'hôte distant:

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

si quelqu'un est intéressé, il est également possible d'interroger $_SERVER['REMOTE_HOST'] mais doit être configuré le fichier httpd.conf sur le serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top