Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
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 20/01/2011, 14h22   #1
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 91
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 91
Points : 11
Points : 11
Par défaut securité lors de la saisie

bonjour, s'il vous plait comment fair un securite contre les attaques lor de la saisie. par exemple un nom qui contien les mots résérvés AND , OR....
comment faire la securité svp.
z_ahlam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 14h49   #2
Nouveau Membre du Club
 
Mika
Inscription : avril 2009
Messages : 31
Détails du profil
Informations personnelles :
Nom : Mika
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2009
Messages : 31
Points : 25
Points : 25
Tu peux te protéger en utilisant la simple quote dans une double quote exemple :

Code :
1
2
3
 
$query = "SELECT * FROM table WHERE champ1='".$var."'";
mysql_query($query);
Il prendra donc tout ta variable pour une chaîne de caractère.
mikah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 14h59   #3
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 91
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 91
Points : 11
Points : 11
mercie pour la réponse mais
ça me parrait trés simple , ou est la securité?
z_ahlam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 15h12   #4
Nouveau Membre du Club
 
Mika
Inscription : avril 2009
Messages : 31
Détails du profil
Informations personnelles :
Nom : Mika
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2009
Messages : 31
Points : 25
Points : 25
La sécurité est que ta variable vas être analysée comme une chaine de caractère entière et lorsque tu va soumettre ta requête il ne vas pas considérer que c'est la suite de la requête. Exemple :

Imaginons que ta variable vaut "7 AND toto=2"

Lorsque tu fais cela :
Code :
1
2
 
$query = "SELECT * FROM table WHERE champ1 = '".$tavar."'"
tu envoies la requête suivante :
Code sql :
SELECT * FROM TABLE WHERE champ1 = '7 AND toto=2'
Il vas donc rechercher toutes les lignes dont le champ1 vaut 7 AND toto=2

tandis que si tu fais cela :
Code :
1
2
 
$query = "SELECT * FROM table WHERE champ1 =  $tavar"
Il vas renvoyer la requête suivante :
Code sql :
SELECT * FROM TABLE WHERE champ1 = 7 AND toto=2

d'où le manque de sécurité, tu comprends ?
mikah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 15h23   #5
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 91
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 91
Points : 11
Points : 11
oui oui mercie bcp j'ai compris .
alors il faut que toute mes requettes je les modifi comme ça?

Code :
$query = "SELECT * FROM table WHERE champ1 = '".$tavar."'" and champ2= '".$tavar2."'"
??
z_ahlam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 15h30   #6
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 91
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 91
Points : 11
Points : 11
j'ai un formulaire pour les eleves pour inscription en ligne , il ecrivent nom , prenom......leurs données, comment proteger avant l'insertion, lors de $_POST????
z_ahlam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 15h34   #7
Nouveau Membre du Club
 
Mika
Inscription : avril 2009
Messages : 31
Détails du profil
Informations personnelles :
Nom : Mika
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : avril 2009
Messages : 31
Points : 25
Points : 25
Citation:
Envoyé par z_ahlam Voir le message
oui oui mercie bcp j'ai compris .
alors il faut que toute mes requettes je les modifi comme ça?

Code :
$query = "SELECT * FROM table WHERE champ1 = '".$tavar."'" and champ2= '".$tavar2."'"
??
Exactement.
mikah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 16h26   #8
Membre chevronné
 
Avatar de djayp
 
Inscription : avril 2004
Messages : 290
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 290
Points : 617
Points : 617
Envoyer un message via ICQ à djayp
Salut !

Attention : l'utilisation des simples quote ou doubles quote ne protège absolument pas les données issues d'un formulaire ! Il sera en effet toujours possible pour un pirate d'injecter du SQL ou d'exploiter les failles XSS !

Toute variable, notamment si elle provient d'un formulaire, doit être validée. Le format des données attendues doit être vérifié (ex: adresse email). Les principales fonctions à utiliser : mysql_real_escape_string() , intval(), htmlentities(), strip_tags() ...

Je te conseille de voir la Faq et les cours sur la sécurité...

A++
__________________
Djay
http://j-place.developpez.com/
djayp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 16h48   #9
Membre confirmé
 
othmane bentalha
Inscription : mai 2006
Messages : 257
Détails du profil
Informations personnelles :
Nom : othmane bentalha
Âge : 25

Informations forums :
Inscription : mai 2006
Messages : 257
Points : 228
Points : 228
Citation:
Envoyé par mikah Voir le message
La sécurité est que ta variable vas être analysée comme une chaine de caractère entière et lorsque tu va soumettre ta requête il ne vas pas considérer que c'est la suite de la requête. Exemple :

Imaginons que ta variable vaut "7 AND toto=2"

Lorsque tu fais cela :
Code :
1
2
 
$query = "SELECT * FROM table WHERE champ1 = '".$tavar."'"
tu envoies la requête suivante :
Code sql :
SELECT * FROM TABLE WHERE champ1 = '7 AND toto=2'
Il vas donc rechercher toutes les lignes dont le champ1 vaut 7 AND toto=2

tandis que si tu fais cela :
Code :
1
2
 
$query = "SELECT * FROM table WHERE champ1 =  $tavar"
Il vas renvoyer la requête suivante :
Code sql :
SELECT * FROM TABLE WHERE champ1 = 7 AND toto=2

d'où le manque de sécurité, tu comprends ?
Et si je tapait "7' OR 1", voilà ce que ça donne:

Code sql :
SELECT * FROM TABLE WHERE champ1 = '7' OR 1'
Comme dit djayp, on ne résout pas les problème d sécurité ainsi
__________________
http://fr.obedev.com/: Un blog sur le développement web et mobile.
othmane126 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2011, 14h39   #10
Candidat au titre de Membre du Club
 
Inscription : février 2009
Messages : 91
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 91
Points : 11
Points : 11
mercie bcp pour vos explications et mercie bcp pour les lien
voilà comment j'ai fait.
le 2fonctions pour supprimer les vide et pour supprimer les carracteres speciaux mais les doubles cotes restent tjrs ne sont pas supprimer.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
function normls($mot) 
{
// remplacer plusieurs vides par un seul
$nbrmot2 = 2;
while($nbrmot2>=2)
{
$mot=str_replace('  ',' ',$mot);
$tableaumot2 = explode('  ',$mot);
$nbrmot2 = count($tableaumot2);
}
// supprimer les vides au début de la phrase
while(substr($mot,0,1)==' ')
{$mot=substr($mot,1);}
 
// supprimer les vides à la fin de la phrase
$nbb=strlen($mot)-1;
while(substr($mot,$nbb,1)==' ')
{
$mot=substr($mot,0,$nbb);
$nbb=strlen($mot)-1;
}
return $mot;
}
 
 
/***********************************************
SUPPRIMER  les cractères spéciaux              *
************************************************/
 
function mot_car_spc($mot_car_spc)
{
$ch="#[._&{}()\[\"|/\-?@+,=*]#";//la virgule ne doit pas etre placer devant #==>msg derreur
if (preg_match($ch, $mot_car_spc))     
 {
  for ($i=0;$i<strlen($ch);$i++) 
	{
	 $r=substr($ch,$i,1);
	 $mot_car_spc=str_replace($r,'',$mot_car_spc);
	}
 }
return $mot_car_spc;
}
//=================================================================
// récupération avec $_POST puis suppression des vides avec la fonction normls et supprimer les carracteres speciaux avec mot_car_spc
//===================================================================
 $aleatoire=($_POST["aleatoire"]); 
$nom=addslashes($_POST['nom']); $nom =htmlentities($_POST['nom']);   $nom =normls($nom) ; $nom =mot_car_spc($nom);
$prenom=addslashes(htmlentities($_POST["prenom"])); $prenom =normls($nom); $prenom=mot_car_spc($prenom);
j'ai tappé ces carracteres dans le champs NOM
à l'affichage voilà ce qu'elle donne===> 'zzzzz jhnkjn "aaaa'
et dans la base de donnee ========> zzzzz jhnkjn &quot;aaaa

qu'elle est la solution
z_ahlam 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 +2. Il est actuellement 00h06.


 
 
 
 
Partenaires

Hébergement Web