Plus tôt aujourd'hui, j'aidais un de mes collègues à exploiter une fonctionnalité d'un site web d'un tiers parti qui nécessitait d'être appellé par le site lui-même pour que la requête soit considérée valide (juste pour préciser, rien n'était illégal dans notre démarche).
Ce que nous avons fait est un peu l'équivalent de se rendre sur une page, de remplir les champs d'un formulaire, de soumettre le tout et de récupérer le résultat pour nos besoins. La différence, c'est que nous avons fait le tout par programmation. C'est donc une méthode peu robuste et durable de faire les choses mais qui nous a servi à atteindre nos objectifs sans trop se casser la tête.
Nous avons créé un script PHP qui a lancé un appel CURL au formulaire distant. Cependant, il ne répondait pas correctement et nous avions de la difficulté à figurer pourquoi. Alors nous avons émis l'hypothèse que le formulaire devait vérifier la provenance de la requête en utilisant la variable serveur HTTP_REFERER car nous avions remarqué que CURL n'envoyait pas de valeur pour ce header.
Nous avons eu l'idée d'avoir recours à une technique nommée referrer spoofing. Ceci consiste à modifier l'entête HTTP qui indique le référant (d'où la requête provient) pour lui substituer un autre URL.
Avec CURL, il suffit d'ajouter la ligne suivante qui initialisera le header avec la valeur qu'on lui passe :
curl_setopt($handler, CURLOPT_REFERER, "http://code18.blogspot.com/");Comme par magie, ça s'est mis à fonctionner.
Si cette simple ligne de code nous a permis d'obtenir le résultat escompté, on devra en conclure que dans notre programmation, la vérification du référant peut parfois être pratique, mais il ne faut pas s'y fier comme mesure de sécurité puisque ça peut être aisément déguisé.