IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Sécurité avec AJAX


Sujet :

AJAX

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 81
    Par défaut [AJAX] Sécurité avec AJAX
    Bonjour à tous,

    Je travaille sur le développement d'un site comprenant un espace membre.

    L'utilisateur renseigne ses différents champs pour s'inscrire, je valide ensuite les infos du formulaire à l'aide de Jquery. Je check en AJAX si le pseudo ou le mail existe en base, etc..

    Toujours à l'aide jquery, si les infos sont bonne, j'appel une page php à l'aide d'AJAX encore pour l'insertion du nouveau compte dans la base de données.

    Je me demande en fait si un utilisateur mal intentionné, écrit un script qui appel cette page plusieurs fois d'affilé avec les bon champs, ça va saturer mon espace WEB et planter mon site (je suis vraiment pas expert en sécurité mais j'ai pensé à ça...).

    En fait je voulais savoir comment restreindre l'utilisation de mes pages AJAX ?

    J'ai essayé de rajouter dans un .htaccess inclus dans le dossier de mes pages appelé en AJAX la ligne :

    Options -ExecCGI -Indexes

    cette ligne interdit le listage du répertoire et l'utilisation du script par un utilisateur mais comme mes script sont appelé par javascript, c'est forcement l’utilisateur qui doit les exécuter, bref, piste en mousse !

    En regardant le code de ma page javascript dans firebug, n'importe qui peut avoir les noms de mes fichiers php que j'appel en AJAX, ainsi que les variables à lui transmettre, et de les utiliser comme bon leur semble, pour les fichier qui check les doublons je pense que ce n'est pas trop grave mais pour les fichiers d'insertion de données dans la base, je pense que la faille de sécurité est évidente ! non ?

    Je pose la question aux experts ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Par défaut
    Citation Envoyé par vgross Voir le message
    Bonjour à tous,

    Je travaille sur le développement d'un site comprenant un espace membre.

    L'utilisateur renseigne ses différents champs pour s'inscrire, je valide ensuite les infos du formulaire à l'aide de Jquery. Je check en AJAX si le pseudo ou le mail existe en base, etc..

    Toujours à l'aide jquery, si les infos sont bonne, j'appel une page php à l'aide d'AJAX encore pour l'insertion du nouveau compte dans la base de données.

    Je me demande en fait si un utilisateur mal intentionné, écrit un script qui appel cette page plusieurs fois d'affilé avec les bon champs, ça va saturer mon espace WEB et planter mon site (je suis vraiment pas expert en sécurité mais j'ai pensé à ça...).

    En fait je voulais savoir comment restreindre l'utilisation de mes pages AJAX ?

    J'ai essayé de rajouter dans un .htaccess inclus dans le dossier de mes pages appelé en AJAX la ligne :

    Options -ExecCGI -Indexes

    cette ligne interdit le listage du répertoire et l'utilisation du script par un utilisateur mais comme mes script sont appelé par javascript, c'est forcement l’utilisateur qui doit les exécuter, bref, piste en mousse !

    En regardant le code de ma page javascript dans firebug, n'importe qui peut avoir les noms de mes fichiers php que j'appel en AJAX, ainsi que les variables à lui transmettre, et de les utiliser comme bon leur semble, pour les fichier qui check les doublons je pense que ce n'est pas trop grave mais pour les fichiers d'insertion de données dans la base, je pense que la faille de sécurité est évidente ! non ?

    Je pose la question aux experts ?
    Je me suis posé ces questions de sécurité, mais finalement pour qu'un script puisse être réutilisé par un tierce, encore faudrait-il qu'il le dépose sur l'espace FTP contenant les pages PHP (sécurité inhérente à Ajax).
    Biensûr, un script externe peut interroger une page PHP sur un autre serveur mais encore faut il que le code PHP soit conçu dans ce but comme avec JSONP (cross-domain avec XMLHttpRequest Ajax).
    Bloquer le listage des fichiers sur le FTP est un plus...
    mctarek

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 81
    Par défaut
    Merci de ta réponse

    J'ai déjà sécurisé le listage de mes fichiers FTP via un htaccess avec l'option "Options -Indexes"

    Je ne peux évidement pas bloquer leur exécution car ils sont exécutes par un javascript. Si je fais cela, partout sur mon site ou un fichier ajax est appelé ça renvoi une erreur 404 APACHE.

    Sauf grosse erreur de programmation de ma part, si j'analyse le code javascript via firebug qui contient ma requête ajax, je peux voir l'adresse exacte de l'emplacement du fichier php appelé par ajax ainsi que le nombre de paramètres, le type (ici de type POST)... Ensuite, il me semble qu'avec firebug justement, on peut redéfinir des variables POST à la volée ? je me trompe peut être ?

    Bref, avec tout ça n'importe qui peut créer un script qui appelle cette page php en essayant n'importe quelle combinaison de variable POST pour tenter d’effacer des données ou tout simplement crasher mon site ?

    C'est surtout ça qui me dérange en fait...

  4. #4
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    C'est à ton script PHP qu'il incombe de tester l'intégrité des données soumises.

    Si une information ne correspond pas à ce qui est attendu, tu peux utiliser des valeurs par défaut avant le traitement, ou tout simplement, ignorer la requête en renvoyant un code d'erreur éventuellement.

  5. #5
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Citation Envoyé par vgross Voir le message
    Toujours à l'aide jquery, si les infos sont bonne, j'appel une page php à l'aide d'AJAX encore pour l'insertion du nouveau compte dans la base de données.
    Comme sur n'importe quel forum PHPBB (par exemple), tu ne peux pas empêcher un utilisateur de créer plusieurs comptes (encore que, avec un contrôle de l'IP… mais bref). En revanche, comme l'a dit Eric2A, ton serveur PHP doit impérativement vérifier tout ce qui provient de l'extérieur avant de lancer une opération de base de données. C'est précisément pour cette raison qu'un serveur de bases de données n'est jamais directement accessible depuis l'extérieur.

    C'est une règle élémentaire de sécurité : ne pas se reposer sur JavaScript pour vérifier les données. Le rôle de JS est d'améliorer le confort de l'utilisateur : ça te permet, par exemple, d'avertir l'utilisateur que ses données sont incorrectes en lui épargnant le temps d'attente d'une requête vers le serveur.

    Comme tu en as l'intuition, un utilisateur malicieux peut modifier les paramètres POST. Et Firebug n'est qu'un outil parmi de nombreux autres… Il existe des logiciels pour créer des requêtes HTTP de toutes pièces, en contrôlant les headers, les paramètres, etc.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 81
    Par défaut
    Ok.

    Je commence a comprendre et je crois l'avoir fait intuitivement car dans les script php appelés par Ajax je vérifie que la variable de session 'id' est bien présente.

    Cette variable s'initialise lorsqu'un utilisateur se log mais est ce que ça suffit?

    Vu qu'on peut savoir les paramètres envoyés a la page en regardant le Javascript, je me dis qu'on peut tenter tout type de variable donc si un utilisateur se connecte, il aura donc sa variable de session 'id', mon test sur la variable est donc vérifié, donc a partir de la, il peut appeler la page qui accède a ma base de données avec son outil de fabrication de requêtes, en essayant des tas de combinaisons différentes pour effacer des données.

    Autre chose, est-il possible de modifier ses variables de sessions ?

    Comment je peux vérifier aux mieux les données envoyées ?

    Désolé si je dis n'importe quoi mais je crois qu'il y a une notion élémentaire que j'arrive pas a comprendre la...

  7. #7
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Salut,
    les variables de session ne sont pas accessibles par le client : elles sont stockées sur le serveur, dans un dossier inaccessible depuis le web (voir la variable ini session.save_path). En revanche, l'identifiant de session (PHPSESSID) est transmis à chaque échange entre le client et le serveur, par cookie ou directement dans l'URL, et il peut être volé lors de la transmission. Le voleur peut alors usurper la session. Un moyen d'éviter ça est de chiffrer la connexion, ou encore de contrôler l'IP du client.

    C'est expliqué plus en détails ici.

    Mais si tu limites les actions possibles qu'un utilisateur peut faire en une session, peu importe qui utilise la session, ta sécurité reste valable. Pas besoin de chiffrage

    Edit: Et n'oublie jamais session_destroy() !
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. [AJAX] La sécurité avec AJAX
    Par Ekinoks dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/03/2008, 13h49
  2. [AJAX] Sécurité avec AJAX
    Par Oluha dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/07/2006, 18h01
  3. [AJAX] Résultat avec Ajax
    Par incao dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 13/05/2006, 22h14
  4. [AJAX] PHP avec ajax(makerequest)
    Par Benjiijneb dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 11/04/2006, 16h53
  5. [AJAX] Modifier avec AJAX une image générée avec GD
    Par thsantac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/03/2006, 19h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo