Utilisation de mysql_real_escape_string() Encore un souci !

Utilisation de mysql_real_escape_string() Encore un souci ! - PHP - Programmation

Marsh Posté le 12-11-2007 à 17:41:37    

Salut a tous !
 
Ayant un souci avec mes formulaire et les saisi d'apostrophe dans ces derniers, j'ai effectués des recherches et fais pas mal d'essai. J'ai reussi a faire en sorte que mes apotrophes soit accepter, mais non sans erreur !
 
Donc a la base j'avais ca :
 

Code :
  1. $sql = "INSERT INTO news(id_news, date, nom, titre, news) VALUES ('',now(),'".$nom."','".$titre."','".$news."')";
  2. mysql_query($sql) or die('Erreur SQL!'.$sql.'<br>'.mysql_error());


 
j'ai réussi a faire accepter mes apostrophes avec ca :  

Code :
  1. $sql = "INSERT INTO news(id_news, date, nom, titre, news) VALUES ('',now(),'".$nom."','".$titre."','".$news."')";
  2. mysql_query($sql) or die('Erreur SQL!'.$sql.'<br>'.mysql_error());
  3. mysql_real_escape_string($news,$titre);


 
malgres le faite que mon insertion SQL soit effective, cela genere une erreur. Sauf qu'en essayant de reiteré ce resultat, je n'y arrive plus ^^
 
Sur la doc de Php j'ai trouver une autre chose et essayer ca:

Code :
  1. $sql = sprintf ("INSERT INTO news(id_news, date, nom, titre, news) VALUES ('',now(),'".$nom."','".$titre."','".$news."')  , mysql_real_escape_string($news,$titre) " );


 
Mais cela ne marche pas du tout !
 
alors que l'exemple du site etait :

Code :
  1. $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
  2. mysql_real_escape_string($user),
  3. mysql_real_escape_string($password));


 
Si vous avez une idée pour décoincer ma situation, je suis preneur.
 
Merci


Message édité par kontas le 20-11-2007 à 10:47:57
Reply

Marsh Posté le 12-11-2007 à 17:41:37   

Reply

Marsh Posté le 12-11-2007 à 17:48:01    

[:mlc][:mlc][:mlc][:mlc][:mlc][:mlc][:mlc][:mlc][:mlc][:mlc] C'est n'importe quoi. Vraiment.
 

  • Si tu es en PHP 5.1 ou supérieur, prière de passer par les bound parameters de mysqli ou PDO.
  • Sinon, prière d'appliquer mysql_real_escape_string sur toutes les valeurs venant du user, et pas l'espèce de soupe merdique que tu nous a pondu
Code :
  1. $query = sprintf("INSERT INTO news(id_news, date, nom, titre, news) VALUES ('',".now().",'%s','%s','%s')",
  2.    mysql_real_escape_string($titre),


 
Sachant que dans tous les cas ça n'empêche pas de réfléchir 30 secondes avant de pondre ce genre de merdes.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-11-2007 à 21:01:24    

masklinn a écrit :

[:mlc][:mlc][:mlc][:mlc][:mlc][:mlc][:mlc][:mlc][:mlc][:mlc] C'est n'importe quoi. Vraiment.
 

  • Si tu es en PHP 5.1 ou supérieur, prière de passer par les bound parameters de mysqli ou PDO.
  • Sinon, prière d'appliquer mysql_real_escape_string sur toutes les valeurs venant du user, et pas l'espèce de soupe merdique que tu nous a pondu


 
Sachant que dans tous les cas ça n'empêche pas de réfléchir 30 secondes avant de pondre ce genre de merdes.


 
N'importe quoi ?! oupsss, desoler,mais toute mes requetes Sql ont cette tete, alors je dois comprendre que j'ai tous a reprendre toutes mes requetes !?
 
je prend note de tes remarques, et je les appliquerais, mais j'aimerais aussi comprendre pourquoi ;)
 
 
les bound parameters de mysqli ou PDO, ca me dit rien du tous, alors je vais me rencarder dessus !
 
mysql_real_escape_string sur toutes les valeurs venant du user, oky, je prend note !
 
le truc qui est bizarre, c'est la tete des valeurs passé: '%s','%s','%s' , je comprend pas pourquoi tu les indiques de cette maniere !
 
 

Reply

Marsh Posté le 12-11-2007 à 21:11:45    

kontas a écrit :

N'importe quoi ?! oupsss, desoler,mais toute mes requetes Sql ont cette tete, alors je dois comprendre que j'ai tous a reprendre toutes mes requetes !?


Oui, si toutes tes requêtes sont comme celle là ton appli c'est du gruyère niveau sécurité, et faut pas t'étonner si tu te fais un jour hacker.

kontas a écrit :

je prend note de tes remarques, et je les appliquerais, mais j'aimerais aussi comprendre pourquoi ;)


http://en.wikipedia.org/wiki/SQL_injection
http://ocliteracy.com/techtips/sql-injection.html
http://weblogs.sqlteam.com/jeffs/a [...] 10728.aspx

kontas a écrit :

le truc qui est bizarre, c'est la tete des valeurs passé: '%s','%s','%s' , je comprend pas pourquoi tu les indiques de cette maniere !


http://fr.php.net/sprintf
 
 


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 13-11-2007 à 09:32:16    

Merci pour ces liens !
 
effectivement, si l'ont peut inserer n'importe quelle argument Sql dans les formulaires, ca fait de sacré faille de sécurité.
 
Disons que la sécurité de mon site n'est pas vraiment importante, puisqu'il s'agit d'un gestionnaire de parc informatique en PHP, donc les information n'y sont pas crucial, sauf les numero de serie de windows, et l'historique de toutes pannes et dépannage..... et comme c'est sur le réseau interne, les attaques sont limitées ^^. Mais pas principe je vais corriger ca !
 
Sinon j'ai essayer de hacker le login de mon site, grace au exemple donner sur les liens que tu m'a fournis plus haut, et je n'ai pas reussi. Alors je ne sais pas si ce script est bien fait ou si j'ai fait une mauvaise manip de hack ^^

Reply

Marsh Posté le 20-11-2007 à 10:47:07    

Me revoila ^^
 
je continu a modifier mon site, en enlevant les requetes Sql 'dangereuse'
 
donc grace a vos conseil je sais remplacer des requetes type INSERT, mais maintenant j'en suis au requete Type UPDATE, et la c'est le drame !
 
le truc c'est que la requete a l'air de s'executer sans souci, que la valeur a inseré est bonne, et que la variable qui conditionne ou faire l'update est bonne ! mais il en resulte que ma champs reste vide apres l'execution de mon script
 
le voici
 

Code :
  1. $id_inter=$_GET["id_inter"];
  2.  // La nouvelle requete Sql
  3.  $sql = sprintf (" UPDATE inter SET rapport='%s' WHERE id_inter='.$id_inter.'",
  4.  mysql_real_escape_string($rapport));
  5.  mysql_query($sql) or die('Erreur SQL!'.$sql.'<br>'.mysql_error());
  6.  //Fin de la nouvelle requete
  7.  /*
  8.  // l'anciene requete sql qui marcher !
  9.  $sql = "UPDATE inter SET rapport='".$rapport."' WHERE id_inter=".$_GET['id_inter'];
  10.  mysql_query($sql) or die('Erreur SQL!'.$sql.'<br>'.mysql_error());
  11.  */
  12.  echo  $rapport;
  13.  echo 'Rapport rendu Senseï! ';
  14.  mysql_close();


 
$rapport n'est pourtant pas vide, mais non, ma table n'est pas renseigné !
 
Merci de votre soutient !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed