Php/mysql
soulblacksamurai
Messages postés
74
Statut
Membre
-
soulblacksamurai Messages postés 74 Statut Membre -
soulblacksamurai Messages postés 74 Statut Membre -
Bonjour,
j'ai écris ce code :
<?php
include("bddconnect.php");
mysql_select_db($database) or die("erreur de connexion a la base de donnees");
$query="SELECT password,username FROM identifiant WHERE password='".$_POST['password']."' AND username='".$_POST['username']."'";
$ok=mysql_query($query);
$row=mysql_fetch_row($ok);
if($_POST['username']!=$row[1] OR $_POST['password']!=$row[0])
{
echo 'Echec de la connexion';
}
else
{
echo 'Connexion reussi';
}
?>
Je voudrais savoir si il est vulnérable et si oui comment et si non pourquoi? Vu que je n'est pas utilisé PDO il devrait l'être cependant lorsque je test un type d'injection SQL elle ne fonctionne pas. On peut m'expliquer ?
merci
j'ai écris ce code :
<?php
include("bddconnect.php");
mysql_select_db($database) or die("erreur de connexion a la base de donnees");
$query="SELECT password,username FROM identifiant WHERE password='".$_POST['password']."' AND username='".$_POST['username']."'";
$ok=mysql_query($query);
$row=mysql_fetch_row($ok);
if($_POST['username']!=$row[1] OR $_POST['password']!=$row[0])
{
echo 'Echec de la connexion';
}
else
{
echo 'Connexion reussi';
}
?>
Je voudrais savoir si il est vulnérable et si oui comment et si non pourquoi? Vu que je n'est pas utilisé PDO il devrait l'être cependant lorsque je test un type d'injection SQL elle ne fonctionne pas. On peut m'expliquer ?
merci
A voir également:
- Php/mysql
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Expert php pinterest - Télécharger - Langages
- Php alert - Forum PHP
- Mysql a répondu : documentation connexion impossible : paramètres incorrects. - Forum Bases de données
2 réponses
Bonjour,
Alors, j'aurais plusieurs remarques sur ton code, pas toutes en rapport avec la sécurité.
- Pour les injections SQL, une règle de base, c'est de ne jamais JAMAIS mettre directement $_POST[] dans l'écriture de la requête.
Tous les champs texte non transformés doivent être échappés au moyen de la fonction mysql_real_escape_string().
- Ta base de données est fragile, car les mots de passe n'y sont pas cryptés. Le cryptage md5() est simple à réaliser et n'est pas réversible (sauf par dictionnaire... on peut donc le « saler » en modifiant la chaîne à l'entrée).
Il suffit d'utiliser la fonction php md5() pour réaliser le cryptage, à l'insertion / modification des données de l'utilisateur, ainsi qu'à la lecture.
- Dans ton code, tu testes deux fois si login et mot de passe sont bons : une fois dans la requête, puis une fois sur le résultat de la requête. Ce deuxième test ne sert à rien.
Du coup, à ta place, je mettrais le code suivant :
Alors, j'aurais plusieurs remarques sur ton code, pas toutes en rapport avec la sécurité.
- Pour les injections SQL, une règle de base, c'est de ne jamais JAMAIS mettre directement $_POST[] dans l'écriture de la requête.
Tous les champs texte non transformés doivent être échappés au moyen de la fonction mysql_real_escape_string().
- Ta base de données est fragile, car les mots de passe n'y sont pas cryptés. Le cryptage md5() est simple à réaliser et n'est pas réversible (sauf par dictionnaire... on peut donc le « saler » en modifiant la chaîne à l'entrée).
Il suffit d'utiliser la fonction php md5() pour réaliser le cryptage, à l'insertion / modification des données de l'utilisateur, ainsi qu'à la lecture.
- Dans ton code, tu testes deux fois si login et mot de passe sont bons : une fois dans la requête, puis une fois sur le résultat de la requête. Ce deuxième test ne sert à rien.
Du coup, à ta place, je mettrais le code suivant :
<?php
include("bddconnect.php");
mysql_select_db($database) or die("erreur de connexion à la base de données");
$username = isset($_POST['username']) ? mysql_real_escape_string($_POST['username']) : '';
$password = isset($_POST['password']) ? md5($_POST['password']) : '';
$query = "SELECT username FROM identifiant WHERE password = '$password' AND username = '$username';
$ok = mysql_query($query);
$row = mysql_num_rows($ok);
if($row == 0)
{
echo 'Echec de la connexion';
}
else
{
echo 'Connexion réussie';
}
?>
Mias crypter c'est quoi exactement ? Pourquoi ma bdd est plus fragile sans ? Peux tu me montrer la manière de "pirater" ce code par un exemple ?
Parceque pour l'instant je connais quelques façon d'écrire ce genre de code (identifiaction, bdd etc....) et de les sécurisés mais sans comprendre le "pourquoi du comment".
Ces réponses m'aideraient beaucoup.
Merci de ton aide !
(PS: merci pour l'amélioration du code)
Parceque pour l'instant je connais quelques façon d'écrire ce genre de code (identifiaction, bdd etc....) et de les sécurisés mais sans comprendre le "pourquoi du comment".
Ces réponses m'aideraient beaucoup.
Merci de ton aide !
(PS: merci pour l'amélioration du code)