Salut,
je suis tombé sur un article de sécurité pour une injection sql qui dit çà (on est dans le cas d'une authentification):
première chose je comprends pas où sont contrôlés les caractères : # () , ; . : |Ainsi pour sécuriser cette faille, il faut parser les input avant d'effectuer la requête MySQL, en vérifiant que $login et $password ne contiennent pas les caractères suivant : () / , ; . : # < > | \ ". Voici comment procéder :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $login = trim(htmlspecialchars(addslashes($login))); //Parsing du login $password = trim(htmlspecialchars(addslashes($password))); //parsing du password if ((strlen($login) != 0) && (strlen($password) != 0)) { //REQUETE MYSQL } else { echo "fuck you :) \n"; }
en survolant la doc php je vois que htmlspecialchars gère & ' " > < et addslashes ' " \ NUL mais nulle trace des caractères précédemment cités.
Cependant si ces fonctions ne le font pas j'imagine qu'il doit y avoir d'autres fonctions pour ces caracteres.
Ensuite je comprend pas l'utilité du htmlspecialchar ici puisqu'il s'agit d'une authentification et donc qu'on est pas en situation d'affichage... donc de sortie html.
A la base j'utilise juste msqli_real_escape_string, mais j'avoue que selon la doc ça échappe pas plus les ) ( & | ;
et dans mon traitement de formulaire du genre :
jimagine que si on met pour login une entrée du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if (!empty($_POST['login']) && !empty($_POST['pass'])) {...}
) || ''='' )#
ca passe sans problème la condition.
Comment faire pour protéger son code contre ça?
Partager