Requête MySQL et caractères spéciaux.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requête MySQL et caractères spéciaux.

Re: Requête MySQL et caractères spéciaux.

par Spols » 03 janv. 2017, 09:25

Avant de passer par cette étape là, tu devrais passer par une étape où tu ne stocke plus les mot de passe en claire dans ta base de donnée.

C'est un gros problème de sécurité de stocker les mot de passe en claire (sans cryptage ou hashage) si quelqu'un a accés à ta base de donnée, il aura accès directement à tous les mot de passe des utilisateurs.

La solution utilisé habituellement dans ce cas là, et le hashage de mot de passe. C'est une procédure en sens unique qui va modifier le mot de passe en une chaine de caractère qui sera toujours la même. mais il sera impossible (c'est plutot une question de temps mais si on parle en siècle de déchiffrage c'est la même chose) de faire l'opération inverse.
Donc pour vérifier le mot de passe, on le hash et on compare ce hash avaec celui sauvegarder en BDD.

Pour complexifier encore un peu le système, on peut aussi utiliser ce qu'on appel le grain de sel (ou sable, ca dépend) mais je te laisse faire une recherche Google.

Il existe plusieurs algo de hash en php, mais aussi une foule de tuto.

De plus, le hash obtenu, ne contiendra pas de caractère spéciaux qui te pose problème.

Requête MySQL et caractères spéciaux.

par Harry Zona » 03 janv. 2017, 01:19

Bonsoir,


Je souhaite sécuriser une partie de mon site en vérifiant l'identifiant (en fait l'e-mail) et le mot de passe de l'utilisateur.

Lorsque je fais un teste avec un mot de passe normal (du genre blaBla01+), tout se déroule normalement.

Je suis donc passé à l'étape supérieure en faisant un test avec un utilisateur ayant un mot de passe contenant des caractères spéciaux (en l'occurrence le mot de passe tesbb'ttt"aa %ù$*£ù¨éà@+-_A). Bien évidemment, là ça plante lamentablement (et la session ne s'initialise pas).

Ce qui est très étonnant, c'est que je fais en sorte de récupérer la requête SQL via un 'echo' et qu'après en avoir fait un copier-coller dans MySQL, je m'aperçois que la requête SQL s'exécute normalement et que j'obtiens bien le résultat attendu. Malgré tout, ça ne fonctionne pas dans le script PHP.
Pour info, la requête SQL récupérée par la procédure echo est la suivante :
SELECT * FROM TableConnexion WHERE email = "[email protected]" AND MotDePasse = "tesbb\'ttt\"aa %ù$*£ù¨éà@+-_A";

<?php

// Si l'utilisateur tente de se connecter, alors on vérifie ses identifiants avant d'ouvrir la connexion.
if (isset($_POST['identifiant']) && isset($_POST['pwd'])) {

	$cnx = mysqli_connect('localhost', 'root', 'MotDePasse', 'MaBDD');

	$identifiant = mysqli_real_escape_string($cnx, $_POST['identifiant']); //Cela pour gérer les caractères spéciaux de $_POST['identifiant'].

	$pwd = mysqli_real_escape_string($cnx, $_POST['pwd']); //Cela pour gérer les caractères spéciaux de $_POST['pwd'].

	$sqlRqte = SELECT * FROM TableConnexion WHERE email = \"".$identifiant."\" AND MotDePasse = \"".$pwd."\";"
	$rqteMdp = mysqli_query($cnx, $sqlRqte);

	if (mysqli_num_rows($rqteMdp) == 1) {

		session_start();
		echo "<script language='javascript'> window.alert('session ouverte'); </script>";

	}
	else {

		echo $sqlRqte."<br>"; // Lorsque je fais un copier-coller de cette sortie dans MySQL : ca marche !!!
		echo mysqli_num_rows($rqteMdp); // Ca me retourne 0 alors que le SQL de la ligne précédente fonctionne dans MySQL.
		echo "<script language='javascript'> window.alert('session fermee'); </script>";

	}

	mysqli_free_result($rqteMdp);

	mysqli_close($cnx);

}

?>