Fonction de securité PHP/MySQL
Résolu/Fermé
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
-
Modifié par Wilou017 le 8/02/2015 à 21:26
Utilisateur anonyme - 9 févr. 2015 à 01:01
Utilisateur anonyme - 9 févr. 2015 à 01:01
A voir également:
- Fonction de securité PHP/MySQL
- Fonction si et - Guide
- Mode securite - Guide
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Fonction moyenne excel - Guide
13 réponses
Utilisateur anonyme
Modifié par le père. le 8/02/2015 à 21:33
Modifié par le père. le 8/02/2015 à 21:33
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.
Utilisateur anonyme
Modifié par le père. le 8/02/2015 à 21:55
Modifié par le père. le 8/02/2015 à 21:55
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) ?
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
Modifié par Wilou017 le 8/02/2015 à 23:22
Modifié par Wilou017 le 8/02/2015 à 23:22
<?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
Utilisateur anonyme
8 févr. 2015 à 22:47
8 févr. 2015 à 22:47
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.
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
8 févr. 2015 à 22:51
8 févr. 2015 à 22:51
ouai je sais mais non il est pas dans une fonction logiquement ça devrais marcher .. ça doit surement venir de mon serveur php
quelle version de php utilise tu ?
quelle version de php utilise tu ?
Utilisateur anonyme
8 févr. 2015 à 23:05
8 févr. 2015 à 23:05
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.
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
Modifié par Wilou017 le 8/02/2015 à 23:22
Modifié par Wilou017 le 8/02/2015 à 23:22
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
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
8 févr. 2015 à 23:22
8 févr. 2015 à 23:22
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
Utilisateur anonyme
8 févr. 2015 à 23:41
8 févr. 2015 à 23:41
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.
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
8 févr. 2015 à 23:43
8 févr. 2015 à 23:43
cette erreur est illogique ..
et
et
print_r($str,'*',$db);affiche rien
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
8 févr. 2015 à 23:47
8 févr. 2015 à 23:47
Warning: print_r() expects at most 2 parameters, 3 given in H:\xampp\htdocs\fonctions.php on line 9
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
8 févr. 2015 à 23:52
8 févr. 2015 à 23:52
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
Utilisateur anonyme
8 févr. 2015 à 23:53
8 févr. 2015 à 23:53
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.
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
8 févr. 2015 à 23:56
8 févr. 2015 à 23:56
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
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
9 févr. 2015 à 00:02
9 févr. 2015 à 00:02
mais c'est pas normal qu'il exécute des requête sql et deux ligne plus loin ça arche plus
Utilisateur anonyme
9 févr. 2015 à 00:02
9 févr. 2015 à 00:02
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.
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
>
Utilisateur anonyme
Modifié par Wilou017 le 9/02/2015 à 00:19
Modifié par Wilou017 le 9/02/2015 à 00:19
et si on essaye d'affiche de quelconque facon que ce soit $db ca fait
Catchable fatal error: Object of class mysqli could not be converted to string in H:\xampp\htdocs\fonctions.php on line 9
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
Modifié par Wilou017 le 9/02/2015 à 00:10
Modifié par Wilou017 le 9/02/2015 à 00:10
print_r($str)affiche rien alors j'ai fait
echo "<script> alert ('$str') </script>";et j'ai deux alerte par champ avec ce que j'ai entré dans mon login et mon mot de passe ce qui est encore plus bizarre ! vue qu'il me dt qu'un de mes champ est vide ! alors que les 4 alerte affiche quelque chose
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
Modifié par Wilou017 le 9/02/2015 à 00:14
Modifié par Wilou017 le 9/02/2015 à 00:14
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"
Utilisateur anonyme
9 févr. 2015 à 00:18
9 févr. 2015 à 00:18
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.
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
9 févr. 2015 à 00:22
9 févr. 2015 à 00:22
ca m'afiche mes info :
string(19) "XXXXX@gmail.com" string(19) "XXXXX@gmail.com" string(6) "PASS" string(6) "PASS"
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
9 févr. 2015 à 00:28
9 févr. 2015 à 00:28
OKAY j'ai trouver le problème x) et je l'ai reglé ca a l'aire de marché, je verifie et je te dit !
Utilisateur anonyme
9 févr. 2015 à 00:32
9 févr. 2015 à 00:32
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 ?
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
Modifié par Wilou017 le 9/02/2015 à 00:33
Modifié par Wilou017 le 9/02/2015 à 00:33
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 ;)
Utilisateur anonyme
9 févr. 2015 à 00:41
9 févr. 2015 à 00:41
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.
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
9 févr. 2015 à 00:42
9 févr. 2015 à 00:42
pas encore l'habitude d'envoyer des $bdd a tout vas pour le mysqli
pourquoi il ont pas laisser c'était très bien avent ..
pourquoi il ont pas laisser c'était très bien avent ..
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
11
>
Wilou017
Messages postés
54
Date d'inscription
jeudi 12 juillet 2012
Statut
Membre
Dernière intervention
21 avril 2015
Modifié par Wilou017 le 9/02/2015 à 00:46
Modifié par Wilou017 le 9/02/2015 à 00:46
il y avais bien une erreur c'est toi même qui l'a dit entre la chaise et le clavier ;) encore merci
Utilisateur anonyme
9 févr. 2015 à 01:01
9 févr. 2015 à 01:01
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é.
Modifié par Wilou017 le 8/02/2015 à 21:38
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..