Proteger une page php utilisé par ajax.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Proteger une page php utilisé par ajax.

par the_grinch » 30 janv. 2009, 21:14

Oki je te remercie :), C'est juste pour limiter les dégats.

par naholyr » 30 janv. 2009, 15:23

naholyr bien sur mais on peut empecher l'accès a un bout de code.
En fait ce que je voulais savoir c'est quel variable est transmise lorsque c'est ajax qui exécute la page.
comme ça :
C'est justement ce que j'essayais de t'expliquer... Le script ne pourra recevoir que des données envoyées par la requête Ajax, et donc via le navigateur. Donc dans tous les cas il sera toujours possible (en modifiant la requête HTTP à la volée) d'accéder à un de tes scripts censé fonctionner uniquement avec Ajax de manière directe et détournée.
Il est donc illusoire de vouloir protéger une page de cette manière. La détection du "if (ajax)" n'a d'intérêt que si c'est pour par exemple proposer un affichage alternatif, mais en aucun cas pour protéger, car tu ne ferais que perdre ton temps.

Enfin cela dit je t'ai donné la réponse (tester la variable _SERVER['X_HTTP_REQUESTED_WITH']), tu peux donc l'utiliser à loisir ;)

par the_grinch » 30 janv. 2009, 15:16

naholyr bien sur mais on peut empecher l'accès a un bout de code.
En fait ce que je voulais savoir c'est quel variable est transmise lorsque c'est ajax qui exécute la page.
comme ça :
if variableajax
moncode
else
Tu n'est pas ajax.
=)

Le code qu'ajax exécute est protégé quand même donc aucun risque mais bon on sait jamais.

En tout cas je te remercie :)

par naholyr » 29 janv. 2009, 21:59

Tu ne pourras jamais mettre en place une protection de ce type. Une page appelée en Ajax est forcément et par définition accessible par le navigateur, donc tu ne peux pas l'empêcher de s'afficher dans un navigateur ;)

Le plus efficace cependant est d'ajouter à toutes tes requêtes Ajax une entête HTTP spécifique.
Par exemple, Ajax.Request de Prototype.js ajoute l'entête 'X-Requested-With': 'XMLHttpRequest', (ligne 1243 de la version 1.6.0.2), et aussi une entete X-Prototype-Version au passage.
Du coup il te suffit de faire ce type de test côté PHP :
if (@$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
  // Appel Ajax
} else {
  // Appel direct
}
C'est à peu près ce qu'il y a de plus sûr dans le sens où l'envoi d'un entête spécifique est moins facile à faire que l'envoi d'une variable GET ou POST, même si ça reste très accessible (n'importe quel développeur web avec un tamperData sur son firefox peut le faire).

par jojolapine » 29 janv. 2009, 18:10

Tu ne pense pas ou t'as essayé? ;)
fait un print_r($_SERVER) dans ton script, et compare les données lorsqu'il est appelé via ajax ou en direct, ça te donnera des pistes ;)

par the_grinch » 29 janv. 2009, 18:06

je transmet l'utilisateur par GET.
Je ne pense pas pour $_SERVER['HTTP_REFERER']

par jojolapine » 29 janv. 2009, 17:46

La seule solution qui me vient à l'esprit, c'est de tester déjà les variables...
Est-ce que tu envoies une requête GET, POST depuis ajax?
Ensuite, mais là je ne suis sur de rien, est-ce que la variable $_SERVER['HTTP_REFERER'] est renseignée dans ton ta page appelée?

Proteger une page php utilisé par ajax.

par the_grinch » 29 janv. 2009, 16:14

Bonjour,
Je souhaiterais protéger une page php qui ne s'ouvre qu'avec ajax.
Donc que quand quelqu'un va sur la page ( avec le navigateur ) ça le bloque et ne laisse exectuer la page que si c'est ajax qui l'exécute.
Merci :)