Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 05/07/2011, 16h58   #1
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 3
Points : 3
Par défaut Le casting protège vraiment contre les injections sql?

Bonjour,

J'aimerais savoir si le casting en int (en PHP) protège complètement contre les injections sql? Voici un exemple de ce que je veux dire:

Code :
1
2
$var = (int)$_GET['var'];
mysql_query("SELECT pass FROM comptes WHERE id={$var} LIMIT 1;");
Est-ce qu'il y a un moyen qu'une personne puisse jouer un peu avec la method GET et contourner la sécurité du PHP (en profitant d'une faille PHP par exemple: avec des caractères spéciaux %00, etc) pour que $var finisse par contenir du text qui vise à s'introduire dans ma requête SQL ?

La façon dont j'ai écris le code, est-elle bien sécurisée? Pas besoin de mysql_real_escape_string() dans ces cas là?
reacen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 17h44   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Tu peux toujours faire un test avec :
Code :
1
2
3
4
5
<?php
if( is_int($_GET['var']) ) {
   mysql_query("SELECT pass FROM comptes WHERE id='".$_GET['var']."' LIMIT 1;");
}
?>
Mais pourquoi se tirer une balle dans le pied en se privant de mysql_real_escape_string() ???
Code :
   mysql_query("SELECT pass FROM comptes WHERE id='".mysql_real_escape_string($_GET['var'])."' LIMIT 1;");
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 17h47   #3
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par jreaux62 Voir le message
Tu peux toujours faire un test avec :
Code :
1
2
3
4
5
<?php
if( is_int($_GET['var']) ) {
   mysql_query("SELECT pass FROM comptes WHERE id='".$_GET['var']."' LIMIT 1;");
}
?>

les variables de $_GET sont toujours du type string ...
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 18h02   #4
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 3
Points : 3
Citation:
Envoyé par jreaux62 Voir le message
Tu peux toujours faire un test avec :
Code :
1
2
3
4
5
<?php
if( is_int($_GET['var']) ) {
   mysql_query("SELECT pass FROM comptes WHERE id='".$_GET['var']."' LIMIT 1;");
}
?>
Mais pourquoi se tirer une balle dans le pied en se privant de mysql_real_escape_string() ???
Code :
   mysql_query("SELECT pass FROM comptes WHERE id='".mysql_real_escape_string($_GET['var'])."' LIMIT 1;");
Merci pour vos réponses.

mysql_real_escape_string() c'est un peu long à taper, et pas très agréable à lire dans son code. Surtout coté optimisation j'ai l'impression que le casting iras plus rapide.

J'ai coder un petit site en se basant complètement sur le cast en (int). (Le escape_string seulement pour les entrés string), devoir changer ça va me prendre du temps, je cherche juste à savoir si c'est sécurisé ou pas.
reacen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 18h03   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
utilise de vrais extensions comme mysqli ou PDO si tu veux faire les choses bien
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/07/2011, 19h49   #6
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 3
Points : 3
On a toujours pas répondu à ma question

Ma technique elle est sécurisée à 100% ou pas, s'il vous plait ?
reacen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2011, 20h34   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par reacen Voir le message
Ma technique elle est sécurisée à 100% ou pas, s'il vous plait ?
oui
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/07/2011, 21h56   #8
Invité de passage
 
Homme
Inscription : mai 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : mai 2011
Messages : 17
Points : 3
Points : 3
Citation:
Envoyé par stealth35 Voir le message
oui
Merci

Je compte sur ça.
reacen est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/07/2011, 08h10   #9
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 806
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 806
Points : 1 520
Points : 1 520
Est-elle sécurisée ? Oui elle n'insérera qu'un entier.
Est-elle viable ? Non car elle t'insérera n'importe quoi.

Essayes de passer une chaîne de caractère à la place d'un entier, ta requête se ferra tout de même avec un entier correspondant au code ascii de la première lettre de la chaîne (ou un truc du genre).
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 12
Vieux 15/07/2011, 22h06   #10
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Citation:
Envoyé par transgohan Voir le message
Essayes de passer une chaîne de caractère à la place d'un entier, ta requête se ferra tout de même avec un entier correspondant au code ascii de la première lettre de la chaîne (ou un truc du genre).
hello,

Citation:
Envoyé par http://www.php.net/manual/fr/language.types.string.php#language.types.string.conversion
...
Ne vous attendez pas à récupérer le code d'un caractère en le convertissant en entier, comme cela est possible en C. Utilisez la fonction ord() et la fonction chr() pour convertir les caractères en codes ASCII.
string -> int est égal à 0.

a+
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 02
Vieux 18/07/2011, 08h28   #11
Membre Expert
 
Avatar de transgohan
 
Homme Baptiste ROUSSEL
Étudiant
Inscription : janvier 2011
Messages : 806
Détails du profil
Informations personnelles :
Nom : Homme Baptiste ROUSSEL
Localisation : France, Territoire de Belfort (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : janvier 2011
Messages : 806
Points : 1 520
Points : 1 520
Citation:
Envoyé par kaymak Voir le message
hello,
string -> int est égal à 0.
a+
Pas du tout...
Code php :
1
2
3
4
<?php  
$string = "5test";
echo (int)$string;
?>
Citation:
5
__________________
Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur.
transgohan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h13.


 
 
 
 
Partenaires

Hébergement Web