24 sept 2008

Sécuriser les appels Paybox, avec CURL

Développement 6 Comments


On a beau avoir une documentation de plus de 60 pages, on ne connait pas forcement les normes xHTML, ou la façon de sécuriser simplement un script ^^

Par défaut, la documentation de Paybox indique un simple formulaire HTML afin de transmettre les variables d’appels à la boutique.
Très rapidement, on voit que les variables sont donc tout à fait publiques, un simple copier/coller suffit à récupérer le formulaire et modifier les variables d’appels.

Afin de sécuriser le tout, nous allons utiliser CURL, afin de masquer l’emplacement du CGI, et masquer nos variables.
De cette manière le traitement entier de l’appel du CGI à la redirection se fera côté serveur, et non plus côté client.

/**
*	Paramètres Paybox
*/
$PBX_MODE = '1';
$PBX_LANGUE = 'FRA'; // FRA French
$PBX_SITE = '1999888';
$PBX_RANG = '99';
$PBX_IDENTIFIANT = '2';
$PBX_TOTAL = $_SESSION['total_a_payer'] * 100; // *100
$PBX_DEVISE = '978';
$PBX_CMD = str_pad( $_SESSION['command_number'], 12, "0", STR_PAD_LEFT );
$PBX_PORTEUR = $_SESSION['client_coords']['email'];
$PBX_RETOUR = "numauto:A;transac:T;id:R";
$PBX_EFFECTUE = 'http://www.maboutique.com/commande-ok.php';
$PBX_REFUSE = 'http://www.maboutique.com/commande-refuse.php';
$PBX_ANNULE = 'http://www.maboutique.com/commande-annule.php';
$PBX = "PBX_MODE=$PBX_MODE&PBX_LANGUE=$PBX_LANGUE&PBX_SITE=$PBX_SITE&PBX_RANG=$PBX_RANG&PBX_IDENTIFIANT=$PBX_IDENTIFIANT&PBX_TOTAL=$PBX_TOTAL&PBX_DEVISE=$PBX_DEVISE&PBX_CMD=$PBX_CMD&PBX_PORTEUR=$PBX_PORTEUR&PBX_EFFECTUE=$PBX_EFFECTUE&PBX_REFUSE=$PBX_REFUSE&PBX_ANNULE=$PBX_ANNULE&PBX_RETOUR=$PBX_RETOUR";
 
$MOD = "http://www.maboutique.com/cgi-bin/module-paybox.cgi";
 
$ch = curl_init();
 
curl_setopt( $ch, CURLOPT_URL, $MOD );
curl_setopt( $ch, CURLOPT_HEADER, 0 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $PBX );
 
$data = curl_exec( $ch );
//echo $data; // DEBUG
 
curl_close( $ch );

C’est toujours mieux qu’un formulaire HTML lorsque l’on dispose de la librairie CURL. De plus il existe d’autres moyens toujours plus sécurisés que le simple formulaire.

Rappelons tout de même que Paybox propose des solutions de paiement en ligne très intéressante et faciles à mettre en place.

6 Responses to “Sécuriser les appels Paybox, avec CURL”

  1. Mathieu Delestre says:

    Testé et approuvé ^^

    Par contre j’ai modifié la séquence Curl pour éviter de récupérer et afficher les entêtes une fois la transaction effectué

    curl_setopt( $ch, CURLOPT_HEADER, 1 );

    devient :

    curl_setopt( $ch, CURLOPT_HEADER, 0 );

  2. _kud says:

    Hello,

    Nous sommes en 2011 et ceci marche toujours. Merci pour le tips ! ;)

    _kud

    • Anthor says:

      Comme quoi… C’est pourtant pas compliqué de modifier sa documentation, surtout qu’à l’époque j’en avais discuté avec eux…

  3. Maxime says:

    C’est un peu réducteur comme discours….

    En effet le mode formulaire permet de rapidement tester l’accès à la page de paiement, ensuite il est bien spécifié dans le manuel d’intégration que cette méthode n’offre pas une grande sécurité et qu’il est fortement conseillé d’utiliser les autres modes (fichier local, variable d’environnement, ligne de commande ou mélange de différents modes).

    Pour finir j’ai été informé que PAYBOX teste actuellement une version sans module cgi.
    Le lancement est prévu pour le débit d’année.

    • Anthor says:

      Réducteur à quel niveau ?
      Il ne me semble pas si compliqué d’indiquer une solution sécurisée.

Leave a Reply