J'ai un site qui utilise les appels ajax pour effectuer un certain nombre de fonctions. Ils font rappeler le navigateur Web à un script - ajax.php. Bien que j'utilise des données post pour transmettre les données et limiter les commandes que le script ajax peut appeler, rien n'empêche vraiment les utilisateurs d'usurper les appels ajax pour tenter de manipuler le site. Existe-t-il un moyen général d'empêcher les utilisateurs d'usurper les appels? Existe-t-il un moyen de s'assurer qu'un appel ajax provient bien de mon site Web et non d'un autre script ou site?
Ou dois-je simplement vérifier les conditions aux limites dans le script php et empêcher les utilisateurs d'usurper des choses qu'ils ne seraient pas autorisés à faire, mais leur permettre d'usurper où ils seraient autorisés.
Réponses:
Je ne pense pas qu'il existe un moyen de le faire de manière fiable, car toute information que vous pourriez envoyer pourrait être falsifiée, en fonction de l'habileté de l'utilisateur.
Si vous voulez juste un simple bloc de personnes qui n'appellent pas depuis votre page, alors vous pouvez vérifier le référent, utiliser un cookie ou ajouter un champ caché aléatoire envoyé par la page appelante qui expire après un certain temps. Mais ceux-ci sont faciles à usurper si l'utilisateur est vraiment déterminé.
la source
Bref, non. Toute demande adressée à une URL via GET ou POST peut être effectuée par toute personne utilisant un logiciel. En fait, une demande AJAX n'est vraiment pas différente du chargement direct de l'URL, sauf qu'avec ce dernier, les données renvoyées sont affichées dans le navigateur comme une page Web.
C'est exactement la raison pour laquelle vous devez toujours valider les données soumises sur le serveur, que vous fassiez ou non une validation Javascript.
On ne sait pas exactement ce que fait le script côté serveur et ce qui pourrait mal se passer, mais si les utilisateurs sont capables de "manipuler le site" en appelant votre script avec de mauvaises données, alors vous vous trompez.
La meilleure solution sera probablement d'introduire une certaine forme d'authentification.
la source
Donc, vous voulez essentiellement limiter ajax.php à ne répondre qu'aux requêtes AJAX?
Je ne suis pas un expert en php, mais il semble possible de déterminer si une demande donnée provient d'AJAX ou d'une demande de navigateur "régulière" en vérifiant la valeur de
$_SERVER['HTTP_X_REQUESTED_WITH']
.La source
la source
Comme quelqu'un l'a souligné ... les appels ajax ne sont que des récepteurs de $ _GET ou $ _POST, donc mon approche a toujours été de les traiter comme je le ferais pour n'importe quelle page d'action et de filtrer / désinfecter l'entrée. Si vous avez une petite variation de ce que vous attendez comme un mois par exemple, et que vous savez qu'il est toujours au format "Jan, Feb, Mar ...", vous pouvez définir un tableau des valeurs attendues et filtrer par rapport à celui-ci. Piéger tout ce qui ne correspond pas et éventuellement renvoyer quelque chose comme "Bzzt ... merci d'avoir joué ..."
Je ne peux pas penser à un exemple où mon script Ajax devrait être plus sûr qu'une soumission de formulaire.
HTH
la source
Je pense qu'une partie importante de votre solution consistera à limiter le trafic à partir d'une empreinte digitale d'utilisateur spécifique. Peut-être un hachage de l'adresse IP, de la chaîne de l'agent utilisateur et des données envoyées.
En outre, la liaison de la page qui appelle ajax aux données renvoyées ajax peut être utile. Donc, sur la page en question, au chargement de la page, envoyez une clé de session qui est bonne pour les
X
sessions, pour chaque demande ajax, votre JavaScript devra renvoyer cette clé ou l'ajax retournera un échec. Une fois que votre page atteint lesX+1
appels ajax, forcez l'utilisateur à faire une action (peut-être captcha? Peut-être même quelque chose comme un événementmousemove
outap
selon l'UA) avant d'envoyer une nouvelle clé de session sur le fil (hors bande de l'ajax d'origine) puis redémarrez le processus.Bien que j'y pense, il est possible qu'une partie de votre problème soit la validation laxiste des paramètres envoyés. Si les gens peuvent simplement jouer avec les paramètres envoyés et récupérer des données valides, rendez cela plus difficile. La façon de procéder dépend du type de valeurs envoyées par le client et du type de méfait qu'un mauvais acteur peut commettre en envoyant de mauvaises valeurs.
la source