Fonction de securité PHP/MySQL
Résolu
Wilou017
Messages postés
54
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
j'ai cette fontion :
appelé comme ceci : Secu([CHAINE DE CARACTÈRE],$bdd);
sans cette ligne :
$str = mysqli_real_escape_string($db, $str);
ca marche bien mais il me la faut et il me renvoie une chaine vide !
j'ai cette fontion :
function Secu($str,$db)
{
$str = trim($str);
$str = nl2br($str);
$str = stripslashes($str);
$str = htmlspecialchars($str);
$str = mysqli_real_escape_string($db, $str);
return $str;
}
appelé comme ceci : Secu([CHAINE DE CARACTÈRE],$bdd);
sans cette ligne :
$str = mysqli_real_escape_string($db, $str);
ca marche bien mais il me la faut et il me renvoie une chaine vide !
A voir également:
- Fonction de securité PHP/MySQL
- Question de sécurité - Guide
- Votre appareil ne dispose pas des correctifs de qualité et de sécurité importants - Guide
- Fonction si et - Guide
- Mode securite - Guide
- Easy php - Télécharger - Divers Web & Internet
13 réponses
Bonjour
appelé comme ceci : Secu([CHAINE DE CARACTÈRE],$bdd);
Non, si tu l'appelles comme ceci, tu as droit à Parse error: syntax error, unexpected 'DE' (T_STRING), expecting ']' parce que ton écriture [CHAINE DE CARACTÈRE] est totalement incorrecte.
Si tu l'appelles avec une vraie chaîne et que tu masques les "warning", ça peut venir d'un problème de connexion à la base qui empêche le mysqli_real_escape_string de bien fonctionner. Essaye dans un premier temps de mettre la ligne du mysqli_real_escape_string en commentaire pour voir.
Au passage, même si ça n'a pas de rapport direct avec ton problème, ta fonction est une horreur. On a vraiment l'impression que, n'ayant pas vraiment compris à quoi servent ces fonctions, tu les as toutes mises dans un grand fourre-tout en espérant t'éviter des problèmes, ce qui est en partie vrai, mais sans te rendre compte que tu vas toi-même corrompre tes données par toutes ces fonction utilisées à mauvais escient.
appelé comme ceci : Secu([CHAINE DE CARACTÈRE],$bdd);
Non, si tu l'appelles comme ceci, tu as droit à Parse error: syntax error, unexpected 'DE' (T_STRING), expecting ']' parce que ton écriture [CHAINE DE CARACTÈRE] est totalement incorrecte.
Si tu l'appelles avec une vraie chaîne et que tu masques les "warning", ça peut venir d'un problème de connexion à la base qui empêche le mysqli_real_escape_string de bien fonctionner. Essaye dans un premier temps de mettre la ligne du mysqli_real_escape_string en commentaire pour voir.
Au passage, même si ça n'a pas de rapport direct avec ton problème, ta fonction est une horreur. On a vraiment l'impression que, n'ayant pas vraiment compris à quoi servent ces fonctions, tu les as toutes mises dans un grand fourre-tout en espérant t'éviter des problèmes, ce qui est en partie vrai, mais sans te rendre compte que tu vas toi-même corrompre tes données par toutes ces fonction utilisées à mauvais escient.
Je sais bien que cette fonction sert à te protéger des gens qui mettent n'importe quoi, je dis juste que tu t'en protèges en faisant autant n'importe quoi qu'eux. Mais ça n'explique pas ton problème.
C'est absolument anormal que ça ne marche pas avec mysqli_real_escape_string. C'est certainement que le $bdd que tu passes n'est pas un bon lien retourné par un mysqli_connect. Peut-on voir ton code de connexion (en cachant tes identifiants, bien sûr) ?
C'est absolument anormal que ça ne marche pas avec mysqli_real_escape_string. C'est certainement que le $bdd que tu passes n'est pas un bon lien retourné par un mysqli_connect. Peut-on voir ton code de connexion (en cachant tes identifiants, bien sûr) ?
<?php define('URL','http://site.wilou/'); // URL du site define('DB_HOST','localhost'); // Host de la base de donnée define('DB_USER','root');// nom d'utilisateur de la base de donnée define('DB_PASS','MDP');// mot de passe de l'utilisateur define('DB_NAME','DBNAME'); // nom de la base de donnée define('DB_PORT','3306'); // port de la base de donnée $bdd=mysqli_connect(DB_HOST.":".DB_PORT,DB_USER,DB_PASS,DB_NAME);// connexion a la base de donnée if (mysqli_connect_errno()) { printf("Echec de la connexion : %s\n", mysqli_connect_error()); exit(); } ?>
utiliser le MySQLi c'est tout nouveau pour moi je suis plutôt a l'ancienne :l
Ta connexion est correcte et chez moi ton code marche, y compris la fonction secu.
L'endroit d'où tu appelles
L'endroit d'où tu appelles
$mail=Secu($_POST["mail"], $bdd);est-il lui-même à l'intérieur d'une fonction ? Si c'est le cas, il ne faut pas oublier de déclarer global $bdd; au début de ta fonction, sinon la variable $bdd est inconnue.
Elles ont bon dos, les versions des logiciels, quand on ne comprend pas ce qui se passe. Si la connexion a bien lieu, c'est que mysqli n'a pas de problèmes.
Ta connexion n'as pas elle-même lieu dans une fonction ? On aurait le même problème de la globalité de $bdd.
Pour vérifier ça, ajoute donc ;
au début de ta fonction Secu
Ma version de PHP c'est 5.4.3 mais ça n'a aucun rapport.
Ta connexion n'as pas elle-même lieu dans une fonction ? On aurait le même problème de la globalité de $bdd.
Pour vérifier ça, ajoute donc ;
print_r($str,'*',$db);
au début de ta fonction Secu
Ma version de PHP c'est 5.4.3 mais ça n'a aucun rapport.
avent e faire ce que tu propose je tien a augmenter le WTF du sujet c'est que j'ai une autre fonction mais elle elle marche:
donc il arrive bien a recupéré le $db
function UserByID($id,$nom,$prenom,$db) { $userbyid=mysqli_fetch_assoc(mysqli_query($db,"SELECT prenom,nom FROM user WHERE id='".$id."' LIMIT 1")); $return = ""; if($nom==1){ $return .= $userbyid['nom']." "; } if($prenom==1){ $return .= $userbyid['prenom']; } return $return; }
donc il arrive bien a recupéré le $db
la fonction comme ca fonctione bien ..
j'ai rajouté
function Secu($str) { $bdd=mysqli_connect(DB_HOST.":".DB_PORT,DB_USER,DB_PASS,DB_NAME); $str = trim($str); $str = nl2br($str); $str = stripslashes($str); $str = htmlspecialchars($str); $str = mysqli_real_escape_string($bdd, $str); return $str; }
j'ai rajouté
$bdd=mysqli_connect(DB_HOST.":".DB_PORT,DB_USER,DB_PASS,DB_NAME);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ton problème n'est pas résolu ! Tu as fait n'importe quoi et tu continues. Tu contournes les erreurs au lieu de les comprendre et de les corriger, tu n'iras pas loin avec cette méthode.
j'ai ajouter une requete sql voir ce que ca faisais:
elle est parfaitement exécuté, j'ai vérifié dans la base de donné:
https://prnt.sc/62s3nk
function Secu($str, $db) { mysqli_query($db,"UPDATE `user` SET `ip_last` = 'TEST' WHERE `id` =1"); $str = trim($str); $str = nl2br($str); $str = stripslashes($str); $str = htmlspecialchars($str); $str = mysqli_real_escape_string($db, $str); return $str; }
elle est parfaitement exécuté, j'ai vérifié dans la base de donné:
https://prnt.sc/62s3nk
cette erreur est illogique Ça ne veut rien dire, une erreur a TOUJOURS une bonne raison d'être. Et tu sais bien qu'elle trouve son origine le plus souvent entre la chaise et le clavier.
print_r($str.'*'.$db);des . au lieu des , j'espère que tu as corrigé de toi-même.
je bloque sur ma page de traitement avec une belle erreur https://prnt.sc/62s59o
non j'utilise pas de print() en php donc j'ai pas fait gaffe
non j'utilise pas de print() en php donc j'ai pas fait gaffe
Moi non plus je ne l'utilise pas souvent, la preuve ^^
En tous cas, on sait que c'est $db est un objet mysqli, ce qui est déjà bien.
Maintenant, print_r($str) seulement. Une fois au début de la fonction et une fois juste avant le return.
En tous cas, on sait que c'est $db est un objet mysqli, ce qui est déjà bien.
Maintenant, print_r($str) seulement. Une fois au début de la fonction et une fois juste avant le return.
en gros ca fait ca :
j'ai mit un exit si non on vois pas les alerte
et il m'affiche bien mon erreur "Merci de remplir tous les champs"
function Secu($str, $db, $blbl) { echo "<script> alert ('$str') </script>"; $str = trim($str); $str = nl2br($str); $str = stripslashes($str); $str = htmlspecialchars($str); $str = mysqli_real_escape_string($db, $str); echo "<script> alert ('$str') </script>"; if($blbl==1) exit; return $str; }
j'ai mit un exit si non on vois pas les alerte
$mail=Secu($_POST["mail"], $bdd,0); $password = HashPass(Secu($_POST['password'], $bdd,1)); if(isset($mail) && isset($password) && $mail!="" && $password!="") { [...] } else { $_SESSION['message_login']="Merci de remplir tous les champs"; header("Location: ".URL); exit; }
et il m'affiche bien mon erreur "Merci de remplir tous les champs"
Ce n'était pas une très bonne idée de te suggérer print_r, on obtient plus de renseignements avec var_dump.
var_dump($str) au début de Secu, et une autre fois juste avant le return.
var_dump($str) au début de Secu, et une autre fois juste avant le return.
Secu ne te renvoie pas une chaîne vide. Depuis 3h1/2 je cherche pourquoi ta fonction renvoie une chaîne vide alors que c'est faux, elle ne renvoie pas de chaîne vide.
Pourquoi dis-tu dans ton premier message que ta fonction renvoie une chaîne vide ?
Pourquoi dis-tu dans ton premier message que ta fonction renvoie une chaîne vide ?
ALORS!!!
en fait je recupere les champ comme ca :
je truc c'est que ma fonction HashPass() utilise la fonction Secu() et elle avais pas le second parametre tel que :
mais en soit mysqli_real_escape_string() sert a rien pour le hashage donc fait refait ma fonction HashPass tel que :
donc voila ça marche Merci de m'avoir aider et m'avoir a comprendre d'où ça venais ;)
en fait je recupere les champ comme ca :
$mail=Secu($_POST["mail"], $bdd); // on ce connecte via son email c'est mieux $password = HashPass(Secu($_POST['password'], $bdd));
je truc c'est que ma fonction HashPass() utilise la fonction Secu() et elle avais pas le second parametre tel que :
$password = HashPass(Secu($_POST['password'], $bdd),$bdd);
mais en soit mysqli_real_escape_string() sert a rien pour le hashage donc fait refait ma fonction HashPass tel que :
function HashPass($str) { $config_hash = "MA_CLE"; $str = trim($str); $str = nl2br($str); $str = stripslashes($str); $str = htmlspecialchars($str); $str = hash($str . $config_hash); return $str; }
donc voila ça marche Merci de m'avoir aider et m'avoir a comprendre d'où ça venais ;)
Et moi, je ne te remercie pas de m'avoir fait chercher une erreur qui n'existait pas. Tu disais que ta fonction Secu rendait une chaîne vide alors que c'était faux. 3h là-dessus.
Le problème ce n'est pas que tu te trompes en programmation, ça n'est pas grave, il faut bien apprendre.
Le problème, c'est que tu donnes de faux renseignements sur tes problèmes. Tu disais que ta fonction te renvoyait une chaîne vide, alors que c'est faux. Ta fonction Secu ne renvoyait pas de chaîne vide, tu ne l'avais même pas vérifié.
Le problème, c'est que tu donnes de faux renseignements sur tes problèmes. Tu disais que ta fonction te renvoyait une chaîne vide, alors que c'est faux. Ta fonction Secu ne renvoyait pas de chaîne vide, tu ne l'avais même pas vérifié.
ensuite je l'ai déjà mise en commentaire et la fonction marche bien et elle marche même quand j'utilise
au lieu de
et puis quand je l'appel je l'appel comme ca :
donc ca ne pose pas de problème
mais c'est bizarre que ce marche avec mysql_real_escape_string() et pas avec la fonction mysqli alors que tout mon site est fait avec mysqli..