Page 1 sur 2

Sécurisé un appel Ajax

Posté : 06 avr. 2010, 13:21
par Yosh
Bonjour à tous,

je viens vers vous afin de savoir quel type de protection vous mettez en place pour les scripts appelé en Ajax?

Des tokens, des sessions?

Merci de vos réponses.

Re: Sécurisé un appel Ajax

Posté : 06 avr. 2010, 14:10
par telnes
hello

vérifier les données reçu surtout :)

mais c'est quoi ta problématique en faite ?

++

Re: Sécurisé un appel Ajax

Posté : 06 avr. 2010, 14:11
par Yosh
hello

vérifier les données reçu surtout :)

mais c'est quoi ta problématique en faite ?

++
Je veux sécurisé l'appel de mes scripts ajax...c'est à dire que si l'appel du script est fait par qq'un d'autre que mon appli, l'appel ne doit pas exécuter le script.

Re: Sécurisé un appel Ajax

Posté : 06 avr. 2010, 15:49
par devlop78
Un système de sessions avec des codes dedans devrait faire l'affaire. Moi par exemple j'avais un truc du genre

index.php

Code : Tout sélectionner

session_start(); $_SESSION['code_ex'] = time(); echo "<img src='image.php' /> (code ...)
image.php

Code : Tout sélectionner

session_start(); if (!isset($_SESSION['code_ex'])) exit; unset ($_SESSION['code_ex']); (code ..)

Re: Sécurisé un appel Ajax

Posté : 08 avr. 2010, 18:48
par zorglub
Une page Ajax n'est qu'une page comme une autre : il suffit de lui appliquer les mêmes règles que pour les autres pages de l'application.

Re: Sécurisé un appel Ajax

Posté : 11 avr. 2010, 23:18
par Aureusms
L'idée de session est bonne. Moi en plus je "cache" l'accès de la page AJAX dans le flow des includes de ma page globale. Cela veut dire : je fais pointer ma page AJAX vers index.php et dans index.php je teste via POST ou GET (selon le mode que tu as choisi en fait) qu'elle page appelle l'AJAX et je fais un include_once de la page qui fera le traitement.

Re: Sécurisé un appel Ajax

Posté : 12 avr. 2010, 01:25
par Nours312
L'idée de session est bonne. Moi en plus je "cache" l'accès de la page AJAX dans le flow des includes de ma page globale. Cela veut dire : je fais pointer ma page AJAX vers index.php et dans index.php je teste via POST ou GET (selon le mode que tu as choisi en fait) qu'elle page appelle l'AJAX et je fais un include_once de la page qui fera le traitement.
t'as pas des risque qu'un petit malin te bombarde de requêtes cUrl et/ou analyse le comportement de tes requêtes, ou autres dans le but de trouver les variables (nom de la page à inclure) pour par la suite aller la chercher directement ?

perso, je considère les pages Ajax comme tout autre page, gérée avec un urlRewriting vérification des sécurité et autres sessions la seul différence entre une page ajax et une page dite "normale" c'est le template en charge de mettre les données en place et appeler les modules externes autonomes ... ainsi, si le gars viens directement, il a les données dans le design du site, et si il n'a pas les droits, il a la page d'accueil ou une 404 !
ça permet entre autre de stoquer +/- dans le template (ou autre) la liste des urls que le log JS va devoir charger en plaçant par exemple une classe sur les liens ou formulaires qui remplaceront le rechargement par une requete ajax pour les mettre (si className : popUp) dans une popUp ^^ ... c'est assez souple comme système ... et on reste dans un environnement de sessions donc c'est pas trop galère à sécuriser.

@+

Re: Sécurisé un appel Ajax

Posté : 15 juil. 2012, 21:20
par two3d
Bonjour,

je souhaiterai que l'on ne puisse pas venir directement sur une page que j'appel avec AJAX mais je ne trouve pas, votre méthode avec session ne fonctionne pas.

Re: Sécurisé un appel Ajax

Posté : 17 juil. 2012, 20:01
par momox
Impossible, si on peut appeller via Ajax, on peut l'accèder autrement.

Concrétement, quelle est ta problèmatique ? Ce sont des données "sensibles" ?

Re: Sécurisé un appel Ajax

Posté : 17 juil. 2012, 20:47
par two3d
c'est un tchat en ajax, les données sont appeler comme ceci:

ya index.php qui reçois les données de la page messages.php dans une div (<div id="tchat"></div>)

j'ai essayer de mettre le code de la page messages.php directement dans la balise div mais du coup ça me recharge un tchat à l'intérieur du tchat et pas moyen d'écrire un message

Re: Sécurisé un appel Ajax

Posté : 17 juil. 2012, 21:09
par nhachet
Bonsoir,

pour sécuriser un appel AJAX (ou tout autre appel d'ailleurs), rien de tel qu'un jeton d'authentification.
Voici un scénario :

1. authentification du client
2. un token unique et temporaire est généré coté serveur, transmis au client et stocké sur le serveur (<token>)
3. le client utilise ce token pour signer ses requêtes => création d'un hash concaténant ce token + la requête (ex: <token> + "GET /ma/ressource" = <mon hash> ; le MD5 est à bannir, privilégier SHA1 ou +)
4. envoi de la requête du client avec le hash (ex: GET /ma/ressource?hash=<mon hash>&user=<mon user>)
5. le serveur reçoit la requête et l'authentifie grâce au hash recalculé avec le user et le token temporaire.
6. le serveur sert la réponse ou rejette la requête (et archive les erreurs, prévient des admins, etc.)

A+

Re: Sécurisé un appel Ajax

Posté : 17 juil. 2012, 21:16
par two3d
Merci mais le token est il fixe ou généré un nouveau à chaque rechargement de la page ?

car si il est fixe on à juste à faire un appel de la page comme tu la préciser (ex: GET /ma/ressource?hash=<mon hash>&user=<mon user>)

Re: Sécurisé un appel Ajax

Posté : 18 juil. 2012, 09:15
par xTG
Ah bah non il est régénéré à chaque chargement de page. Sinon aucun intérêt de le stocker en session puisqu'on pourrait le mettre en dur. ;)

Re: Sécurisé un appel Ajax

Posté : 18 juil. 2012, 10:58
par two3d
D'accord mais comment le généré à chaque fois et vérifier que c'est le bon ?

Re: Sécurisé un appel Ajax

Posté : 18 juil. 2012, 11:52
par nhachet
Merci mais le token est il fixe ou généré un nouveau à chaque rechargement de la page ?

car si il est fixe on à juste à faire un appel de la page comme tu la préciser (ex: GET /ma/ressource?hash=<mon hash>&user=<mon user>)
Dans mon scénario, il est fixe. Ce que le client transmet dans la requête ci dessus ce n'est pas directement le token mais le hash calculé en fonction du token (dans mon exemple, le hash est calculé en concaténant le token + la requête URI, sans les paramètres GET).

Les jetons générés à chaque utilisation/validation de formulaire utilise un principe similaire, sauf que le jeton à une durée de vie courte (quelques minutes) et que le jeton est transmis tel quel (pas de hash). Il sont généralement utilisés pour contrer le CSRF.