Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 17/03/2010, 13h43   #1
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
Par défaut javascript et la sécurité ?

Bonjour.
Voici un problème de sécurité avec javascript. Par exemple
une fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
function modifierRDV(action,codRDV,etaRDV){
 
	dtRDVo=getObjectById("dtRDV").value;
	alert(dtRDVo);
	heurMnt=getObjectById("heurRendeVou").value;
	reqe="RDVou.do?action="+action+"&codRDV="+codRDV;
 
//fonction qui envoie et récupère les données 
 
    envoyerReq(reqe,'divRDVs',false);
 
    affichRDVs();
}
le problème est que si un utilisateur lit ce script et qu'il met dans la barre d'adresse :
nom de site web/reqe="RDVou.do?action="+action+"&codRDV="+codRDV;
le serveur va exécuter la requête.
Comment éviter d'avoir un tel scénario ?

Bref : l'utilisateur connait le chemin pour exécuter une opération qui nécessite d'avoir effectué une condition en préalable (ex : se connecter, remplir une zone de texte) mais puisque l'utilisateur connait le chemin il ne va pas remplir la zone de texte... il va essayer d'envoyer dans la barre d'adresse l'url donc interroger directement le serveur sans passer par le script.

Si vous n'avez pas compris ma question merci de le signaler.
Merci d'avance .
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 14h26   #2
Rédacteur/Modérateur
 
Avatar de SpaceFrog
 
Homme
Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Inscription : mars 2002
Messages : 29 074
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Royaume-Uni

Informations professionnelles :
Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur
Secteur : Industrie

Informations forums :
Inscription : mars 2002
Messages : 29 074
Points : 43 293
Points : 43 293
passe les données en post ...
mais ça ne resoudra pas le problème de transmission des donnés car on peut tout de même envoyer des données en post ...

Ce n'est pas au niveau javascript que cela se sécurise ...

a toi de prevoir ce que l'utilisateur peut faire et comment l'en en empecher ...
il faut tester les données coté serveur.
__________________
Ma page Developpez
Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
Votre post est résolu ? Alors n'oubliez pas le Tag


réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr
SpaceFrog est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 15h50   #3
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
Même si je fais l'envoi en post ; puisque l'envoi est à partir du script js, l'utilisateur peut les charger et connaitre les urls qui se trouvent dans mes fonctions puis utiliser ces urls .
Que dois-je faire?
Y a-t-il une possibilité d'empêcher les clients de charger les scripts js ? Sachant que j'appelle des scripts externes dans mes pages jsp ou html.
Merci d'avance
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 16h36   #4
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 037
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2007
Messages : 9 037
Points : 14 651
Points : 14 651
Bonjour,
tu as dû louper la dernière phrase de SpaceFrog :
Citation:
Envoyé par SpaceFrog Voir le message
il faut tester les données coté serveur.
C'était la plus importante

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 17h08   #5
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 12 879
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 12 879
Points : 30 140
Points : 30 140
Citation:
Envoyé par yacine.dev Voir le message
Y a-t-il une possibilité d'empêcher les clients de charger les scripts js ?
Ben si tu veux que les scripts soient exécutés, il faut bien qu'ils soient chargés
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 17h23   #6
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
Citation:
Envoyé par E.Bzz Voir le message
Bonjour,
tu as dû louper la dernière phrase de SpaceFrog :
C'était la plus importante

A+
Mais c'est très fastidieux de vérifier coté client et coté serveur.y'a pas de solution?pourrons dire que c'est l'un des défaut d'utiliser javascript?
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 17h43   #7
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 037
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2007
Messages : 9 037
Points : 14 651
Points : 14 651
Citation:
Envoyé par yacine.dev Voir le message
Mais c'est très fastidieux de vérifier coté client et coté serveur.y'a pas de solution?pourrons dire que c'est l'un des défaut d'utiliser javascript?
Pas vraiment, non.
C'est peut être toi qui te fais une mauvaise idée de Javascript

S'il n'y a qu'un seul des 2 contrôles à faire, c'est sur le serveur.

Le contrôle Javascript n'est là que pour le confort de l'utilisateur, mais ne peut (et ne doit) pas être considéré comme une sécurité.

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 18h17   #8
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
Par défaut validation formulaire coté serveur ou coté client

Citation:
Envoyé par E.Bzz Voir le message

S'il n'y a qu'un seul des 2 contrôles à faire, c'est sur le serveur.

Le contrôle Javascript n'est là que pour le confort de l'utilisateur, mais ne peut (et ne doit) pas être considéré comme une sécurité.

A+
oui j'ai compris,merci.
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .

Dernière modification par yacine.dev ; 17/03/2010 à 19h09.
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 13h49   #9
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
Par défaut send(data) de ajax

Bonjour
je cherche vraiment a bien sécuriser mon application voila une faille qui peut être très dangereux sur un application web.


urlx: dans mon application ce url est toujours exécuté via une fonction ajax.

je cherche à refuser urlx quand sa prevenace est de la barre d'adresse.

pourquoi?

c'est la seule différence que j'ai trouvé entre un utilisateur tolérant et l'autre (celui que si je le trouvrai je le supprimerais de la vie(avec une l'instruction sonNom.delete; )celui qui veut exécuter des requêtes par la barre d'adresse sans passer par les fonctions javascript et donner de fausses paramètres (je ne parle pas de type) comme il est sité au dessus ,valider des rendez-vous non affichés dans la page en changeant la valeur de paramètres codrendezvou
mais par exemple :
dans une page j'affiche les rendez-vous à valider seulement
rdv num=1 bouton :valider
rdv num=2 bouton :valider(cet bouton appelle une fonction en envoyant avec, le num de rendezVous,la fonction le recupéré puis l'envoie dans urlx pour valider ce rendez-vous


mais on pourra valider le rendez-vous numero 4(qui n'est pas dans la liste des rendez vous à valider) en envoyant la urlx via barre d'adresse et changant la valeur de paramétre coderendezvous.


le serveur n'a qu'a recevoir l'url et teste les paramètres et exécuter le code

c'est ici que je me suis dis il faut savoir si la requête est envoyée par ajax c'est à dire c'est la page qu'a envoyé la requête
sinon ne rien exécuter.


je sais pas si avec send(data) de ajax je pourrais distinguer entre les paramètres concaténés avec l'url et ceux dans req.send(data);


merci de me proposer quelques idée comme même ça reste une référence pour ceux qui cherche la même chose.
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 14h36   #10
Inactif
 
Inscription : novembre 2002
Messages : 117
Détails du profil
Informations forums :
Inscription : novembre 2002
Messages : 117
Points : 123
Points : 123
OU PAS.
Tu ne réfléchis pas du tout comme il faut réfléchir là.
Tu veux détecter si l'url viens d'une action Ajax ou pas, mais si je te dis que je peux moi meme simuler que cette URL vient d'une action Ajax ? tu fais quoi ?

Tu dois obligatoirement sur ton fichier tester les droits de l'utilisateur, et si cet utilisateur a le droit de faire cette action ou pas. et donc en utilisant les informations de session que tu as en ta possession. Et c'est pas compliqué coté PHP.
Gatsu35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 15h58   #11
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
Bonjour
Citation:
Envoyé par Gatsu35 Voir le message
OU PAS.

Tu veux détecter si l'url viens d'une action Ajax ou pas, mais si je te dis que je peux moi meme simuler que cette URL vient d'une action Ajax ? tu fais quoi ?
.
ça je ne sais pas comment?

Citation:
Envoyé par Gatsu35 Voir le message
OU PAS.


Tu dois obligatoirement sur ton fichier tester les droits de l'utilisateur, et si cet utilisateur a le droit de faire cette action ou pas. et donc en utilisant les informations de session que tu as en ta possession. Et c'est pas compliqué coté PHP.
ce n'est pas le probléme de droit car il peut avoir le droit et il veut valider un rendez-vous non figurant dans la page comme j'ai expliqué (message précedent)il change la valeur de paramétre codrendezvou et voila le serveur va verifier les droits (ok)et il validera le rendezvous dont le code est envoyé par le client(validRDV.do?codeRendezvous=valeur que je veux) et non pas le rendez-vous affiché dans la page

-----liste de rendez-vous a valider------
codRendezvou :1---- bouton valider

y' a pas une différence entre l'envoi dans la barre d'adresse et l'envoie d'ajax?
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2010, 20h04   #12
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 12 879
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 12 879
Points : 30 140
Points : 30 140
Citation:
Envoyé par yacine.dev Voir le message
y' a pas une différence entre l'envoi dans la barre d'adresse et l'envoie d'ajax?
Il peut y avoir des différences si tu définis des headers spécifiques dans ta requête AJAX (typiquement, X-Requested-With, comme le fait jQuery).
Ceci dit, comme le souligne Gatsu35, cela n'empêchera pas de pouvoir "simuler" ta requête avec des mauvaises valeurs.

Ce qui revient à ce que tout le monde te dit depuis le début : tu ne peux pas contrôler avec JavaScript les données qui sont envoyées au serveur, c'est donc coté serveur que tu dois t'assurer que ce que tu reçois est valide !
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 09h44   #13
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
ok,merci à vous tous
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 09h57   #14
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 037
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2007
Messages : 9 037
Points : 14 651
Points : 14 651
Dans ton cas, lors de la génération de la page, tu pourrais mémoriser sur le serveur (variable session) les rendez-vous que l'utilisateur aura le droit de modifier ainsi que le type de modification.

Ainsi, lorsque ton serveur reçoit la requête, tu n'as plus qu'à comparer.
Si elle ne fait pas partie de la liste, tu renvoies un message d'erreur, sinon, c'est tout bon.

Dans ce cas, quelques soient les tentatives de contournement, il ne peut modifier que ce qui est prévu.
Si il s'amuse à bidouiller dans la barre d'adresse, c'est son problème : tant que la requête reçue est valide il n'y a plus de danger

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 11h09   #15
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
Par défaut utiliser la session mieux qu'intéroger la bd?

Oui ,c'est exactement ce que je fais maintenant ,je teste la validité de requéte et si il n'est pas logique exil valide un rendes-vous déja validé =>le serveur affiche une page d'erreur).Mais je ne dois pas enregister la liste de rendez-vous dans la session il faut dans chaque modification interroger la base de donnée(select les rendez-vous...)pourquoi??
il peut que les informations de base de donnée changent et la session conserve des anciennes donnée (comme les réservations des places d'avion). dans ce cas le serveur teste sur des données anciennes ce qui engendre à une perturbation de validation.

le fait d'interroger la base de donné chaque fois ,ça n'alourdit pas la vitesse surtout que j'utilise hibernate?.

Que vous en dites??

Merci.
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 11h18   #16
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 037
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2007
Messages : 9 037
Points : 14 651
Points : 14 651
Les 2 problèmes sont différents :
  • si il tente de modifier un rendez-vous que tu n'avais pas prévu et mémorisé au moment de la génération de la page => "Vous n'avez pas le droit de ..."
  • si il modifie un rendez-vous que tu avais autorisé au moment de la génération, mais que des modifications effectuées entretemps ont rendu non modifiables => "Il n'est plus possible de modifier ce rendez-vous parce que ..."
Dans le 1° cas, tu peux faire le contrôle directement à réception de la requête sur le serveur (en comparant avec ta liste mémorisée).
Dans le 2° cas, puisqu'il aura passé le 1° contrôle, c'est sûrement au moment de mettre à jour la base de données que le problème sera détecté et que tu pourras renvoyer le message approprié (la fin de la phrase "parce que ...")

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 12h03   #17
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
Citation:
Envoyé par E.Bzz Voir le message

Dans le 2° cas, puisqu'il aura passé le 1° contrôle, c'est sûrement au moment de mettre à jour la base de données que le problème sera détecté et que tu pourras renvoyer le message approprié (la fin de la phrase "parce que ...")
donc je dois faire deux contrôle le premier celui avec la liste mémorisé => le deuxième test ,quand je mets à jour le champs etaRendevou
(if(etaRendevou=="nonModifiable") => renvoyez à la page d'erreur)
si oui mais il peut qu'un rendez-vous au moment de la génération est non modifiable et au moment de l'envoie de requête sera modifiable donc on passera pas le premier test.
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 12h13   #18
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 037
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2007
Messages : 9 037
Points : 14 651
Points : 14 651
Citation:
Envoyé par yacine.dev Voir le message
si oui mais il peut qu'un rendez-vous au moment de la génération est non modifiable et au moment de l'envoie de requête sera modifiable donc on passera pas le premier test.
Oui, mais c'est ton appli, donc ça c'est à toi de voir
Ce n'est pas un problème technique mais fonctionnel ...

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 12h28   #19
Membre du Club
 
Avatar de yacine.dev
 
taha yacine
Inscription : octobre 2009
Messages : 175
Détails du profil
Informations personnelles :
Nom : taha yacine
Âge : 23

Informations forums :
Inscription : octobre 2009
Messages : 175
Points : 46
Points : 46
donc en tous cas je dois me connecter à la base de donnée pour tester ,c'est obligatoire ?
__________________
Tant d'avoir une belle chose de vouloir la partager,avant de poser des questions techniques en informatique ,il y'en a plusieurs qui se posent pourquoi une vie assez courte ?pourquoi pas rester pour toujours ? et beaucoup sont perdus .
yacine.dev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2010, 12h31   #20
Responsable Modération
 
Homme
Inscription : janvier 2007
Messages : 9 037
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Isère (Rhône Alpes)

Informations forums :
Inscription : janvier 2007
Messages : 9 037
Points : 14 651
Points : 14 651
Citation:
Envoyé par yacine.dev Voir le message
donc en tous cas je dois me connecter à la base de donnée pour tester ,c'est obligatoire ?
D'après tes descriptions, ça semble incontournable oui

A+
E.Bzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 15h19.


 
 
 
 
Partenaires

Hébergement Web