09-23-2008, 11:40 AM
Hum.
Je vous invite à faire un petit tour sur : http://fr.php.net/manual/fr/language.ope...arison.php
Donc, reprennons :
- == est une comparaison d'égalité. Effectivement, comparer un int avec un string amène à la conversion du string en int (cf : http://fr.php.net/manual/fr/language.typ...onversion)
Donc, en cas de test avec un double égal, la conversion a lieu. La chaine est alors convertie : ici, elle donne 0 (pas de chiffres dans le mot), donc elle est égale, donc le test marche.
- === : identique.
Donc comme indiqué plus haut, cela vérifie le type. Quelques exemples :
Donc voila, pour un test entre deux types, faites un triple égal. Sinon, vous aurez toujours 0.
Corrolaire :
admin.php
Si un utilisateur s'amuse à faire admin.php?mdp=0, il aura accès à votre administration.
admin.php
Ceci corrige la faille.
Bonne journée !
PS : Zack, les accolades ne sont absoluement pas obligatoires en PHP pour une seule instruction.
Je vous invite à faire un petit tour sur : http://fr.php.net/manual/fr/language.ope...arison.php
Donc, reprennons :
- == est une comparaison d'égalité. Effectivement, comparer un int avec un string amène à la conversion du string en int (cf : http://fr.php.net/manual/fr/language.typ...onversion)
Citation :La valeur est fournie par la portion initiale de la chaîne de caractères. Si la chaîne de caractères commence par un caractère numérique valide, ce sera la valeur utilisée. Sinon, la valeur sera de 0 (zéro).
Donc, en cas de test avec un double égal, la conversion a lieu. La chaine est alors convertie : ici, elle donne 0 (pas de chiffres dans le mot), donc elle est égale, donc le test marche.
- === : identique.
Citation :TRUE si $a est égal à $b et qu'ils sont de même type
Donc comme indiqué plus haut, cela vérifie le type. Quelques exemples :
Code PHP :
var_dump(0 == ''); // Affichera TRUE
var_dump(0 === ''); // Affichera FALSE
var_dump(1 == '1test'); // Affichera TRUE
var_dump(1 === '1test'); // Affichera FALSE
Donc voila, pour un test entre deux types, faites un triple égal. Sinon, vous aurez toujours 0.
Corrolaire :
admin.php
Code PHP :
<?php
$mdp = $_GET['mdp']
if($mdp == 'mon_mot_de_passe_admin')
{
connecter_administrateur();
}
?>Si un utilisateur s'amuse à faire admin.php?mdp=0, il aura accès à votre administration.
admin.php
Code PHP :
<?php
$mdp = $_GET['mdp']
if($mdp === 'mon_mot_de_passe_admin')
{
connecter_administrateur();
}
?>Ceci corrige la faille.
Bonne journée !
PS : Zack, les accolades ne sont absoluement pas obligatoires en PHP pour une seule instruction.
Code PHP :
// Est valide
if(true)
{
echo 'toto';
} else {
echo 'tata';
}
// Est aussi valide
if(true)
echo 'toto';
else
echo 'tata';
// Est toujours valide
$toto = (true) ? echo 'toto' : echo 'tata';