Salut,

je suis tombé sur un article de sécurité pour une injection sql qui dit çà (on est dans le cas d'une authentification):

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";
}
première chose je comprends pas où sont contrôlés les caractères : # () , ; . : |
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
if (!empty($_POST['login']) && !empty($_POST['pass'])) 
{...}
jimagine que si on met pour login une entrée du genre :
) || ''='' )#
ca passe sans problème la condition.

Comment faire pour protéger son code contre ça?