Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 22h07   #1
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 320
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 320
Points : 119
Points : 119
Par défaut formulaire validation et PDO VS htmlentities

bonjour à vous et meilleurs voeux.

je vous soumet le code pour valider les données d'un formulaire avant application d'une requete sql.

est-ce que l'utilisation de la fonction mysql_real_escape_string() et correcte et judicieusement utilisée?

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
<?php
include("check.php");
 
$input=$_POST['info'];
if(ctype_digit($input)){
	echo "information valide";
	$a= mysql_real_escape_string($input);
	echo $a;
}else{
	echo "information non valide";
}
$input_date=$_POST['date'];
list($jour, $mois, $annee) = explode('/', $input_date);
if(checkdate($mois,$jour,$annee))
{
  echo "date valide";
  $b= mysql_real_escape_string($input_date);
	echo $b;
}
else
{
  echo "date non valide";
}
?>
Sachant que la requete est utilisée en mode PDO du type

Code :
1
2
$check_credentials_query = $mysql->prepare("SELECT * FROM users WHERE user_name=:username AND user_password=:password");
$check_credentials = $check_credentials_query->execute(array('password' => $password, 'username' => $username));
Concernant la requete doit-elle être dans la même page que le contrôle ou doit-elle être sur une autre page.php?

Est-ce que la combinaison de mon formulaire de validation des données et l'utilisation PDO pour les requêtes propose un niveau de sécurité optimale.
Est-ce que ça remplace les htmlentities? (pas certain de l'orthographe)

Le fichier "check.php" contrôle s'il y a un token créé lors du loging et que la connection à la bdd se fait via le fichier config.php appelé par check.php

merci d'avance pour votre info.

Question2: idiote je suppose, pour votre formulaire de loging, utilisez-vous aussi le controle de donnée; avant d'utiliser la requête?
hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 22h30   #2
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 509
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 509
Points : 21 345
Points : 21 345
mysql_real_escape_string() n'a rien à faire dans du PDO.

pour htmlentities(), cela concerne l'affichage de données dans du code HTML, il est donc toujours nécessaire.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 09h52   #3
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 320
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 320
Points : 119
Points : 119
j'ai lu différents forums sur le sujet et voilà une réponse récapitulative êtes vous d'accord avec ça si c'est oui, mon code a l'air correct?


1/ Lors de l'insertion dans la BD, si on s'attend à une string ou du texte, pour se prémunir des attaques SQL on utilise:
Code : PHP -
Code :
1.<?php mysql_real_escape_string(); ?>
si tu attends une valeur numérique:

Code : PHP - Tu seras donc protégé des attaques qui menaces la BD.


------------------------------
2/ Lors de l'affichage, et seulement à ce moment on utilise 2 fonctions:
Code : PHP -
Code :
  <?php htmlspecialchars(); ?>
et si tu veux avoir les sauts de ligne xHTML, tu prends:
Code : PHP -
dans le cas que tu ne l'envoies pas dans un textarea, car il prendra le \n en compte.

J'y perds mon latin, avec les entrées et les sorties.
concernant la validation des variables suis-je dans les clous,
IMPORTANT est-ce que la requête est dans le même formulaire où dans un autre???

après pour éviter l'injection sql est-ce que quelqu'un peut mettre un exemple de son code dit idéal.
On verra plus tard pour l'affichage.
hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 09h58   #4
sabotage
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 16 509
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 16 509
Points : 21 345
Points : 21 345
Avec PDO il faut faire comme dans ton premier code : des arguments dans une requêtes préparées.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/01/2013, 10h13   #5
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 320
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 320
Points : 119
Points : 119
ok mais est-ce que cette méthode de PDO me préserve des injections sql (a priori oui selon l'ouvrage que j'ai)?

Si c'est non
comment m'en prémunir?

en fait il y a tellement de trucs entre special quote, htmlentities,.... je ne sais pas qui protège de quoi et qu'elle code faire.
s'il faut mettre toutes les fonctions bout à bout c'est pas simple.
De tout façon si on veut péter une base on la pétera toujours?

Comment tu procèdes toi?
hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 10h21   #6
hugodu28
Membre habitué
 
hugues dupont
Pompier
Inscription : janvier 2010
Messages : 320
Détails du profil
Informations personnelles :
Nom : hugues dupont
Localisation : France

Informations professionnelles :
Activité : Pompier

Informations forums :
Inscription : janvier 2010
Messages : 320
Points : 119
Points : 119
bon je viens de trouver un forum qui repond un peu à ma recherche
hugodu28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h34.


 
 
 
 
Partenaires

Hébergement Web