Affiche les " sortie de base données

Répondre
jackbocar
le 20/02/2005 à 12:52
jackbocar
Bonjour,

Comment puis-je faire avec une base de données qui me renvoie des erreurs à cause des : <a href="index.php" class="nav">Lien</a>. Elle refuse de me prendre les ( " ) ?.
C'est la même chose avec les images.

Ce qui met par terre tout mes codes XHTML.

<?php 
$query = 'INSERT INTO news (id,titre,image,comment) VALUES ( "" , "'.$_POST["titre"].'" ,"'.$_POST["image"].'" ,"'.$_POST["comment"].'" ) ';
$result = mysql_query($query) or die (mysql_error());
?>


Merci de ton aide

Jack Bocar
Bzh
le 20/02/2005 à 13:07
Bzh
Tu passe bien tes variables par la fontion
<?php addslashes(); ?>
???

Elle permet de transformer ta chaine de cractères:

=><a href="index.php" class="nav">Lien</a>

en

=><a href=\"index.php\" class=\"nav\">Lien</a>

C' est très important, sinon ta requéte est mauvaise...

Je pense que ton problème vient de là...

Bye...

smiley
keitarosan
le 20/02/2005 à 13:35
keitarosan
en plus, ca veut dire que t'es sujet dans le cas contraire a du sql injection.

en clair, je vais sur ton site
je met un ".
si ta requete plante, je vais peut etre voir le nom de ta table. Ensuite je fais joujou avec, soit en la remplissant de données (genre 1million de ligne), soit je m'amuse a tout éffacer... smiley

Donc en clair, super tres mauvais ^^

Donc penser bien a passer vos variable qui vont dans une requete, a la fonction mysql_escape_string() !!

c'est bien mieux :p
Le addslashes() marche aussi, mais il est plutot réservé a la l'affichage...
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
Bzh
le 20/02/2005 à 14:46
Bzh
Keitarosan n' a pas tord !!!

Bon il est frant mais à pa tord !!!

Il faut absolument interdire tous les cractères actifs dans une requète.(",',# etc....)

Et pour cela tu peux utilisé la fonction addslashes() qui rajoute le cractère \ qui rend les cractères qu' il précède inactif s' ils étaient actifs !!!

Si tu veux, ta requète plantait car tu insérait par l' intermédiaire de tes variables le caractère " qui devenait actif et te transformait ta requète en mauvaise requète ...

La fonction mysql_escape_string() permet de rendre inactif tous les cractères sencés être actif dans une requète....

J' éspère avoir été clair...

Bye...
keitarosan
le 20/02/2005 à 14:56
keitarosan
au moins, si on fait peur, la personne fait plus attention :)
Car le pire, c'est que c'est tout a fait ca :(

Donc faut vraiment faire très attention avec vos requete :)
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
jackbocar
le 20/02/2005 à 16:06
jackbocar
Bonjour,

Merci de vos mises en gardes, je ne suis pas un pro loin de là...

J'ai trouvé ceci sur les sites de PHP :
addslashes
stripslashes


INSERT

<?php
$query = 'INSERT INTO news (id,titre,image,comment) VALUES ( "" , "'.addslashes($_POST["titre"]).'" ,"'.addslashes($_POST["image"]).'" ,"'.addslashes($_POST["comment"]).'" ) ';
$result = mysql_query($query) or die (mysql_error());
?>

AFFICHE

<?php
$query = 'SELECT titre,image,comment FROM news';
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array ($result))

{
echo stripslashes($row[titre]).' - '.stripslashes($row[image]).' - '.stripslashes($row[comment]).
}
?>


Maintenant, est ce comme ceci qu'il faut faire ?

Si ce n'est pas encore parfait, une petite correction de script serait la bien venue.

Jack Bocar
Bzh
le 20/02/2005 à 16:47
Bzh
Là tu es beaucoup plus protègé !!!

En théorie, je ne pense pas que comme cela tu puisses être victime d' une injection d' SQL !!!

L' inconvéniant d' addslashes() c' est qu' elle ne protège pas contre, par exemple, # (permet le commentaire en SQL)...

Je te propose une petite modification:

<?php

//INSERT


$query = 'INSERT INTO news (id,titre,image,comment) VALUES ( "" , "'.htmlentities(mysql_escape_string(trim($_POST["titre"]))).'" ,"'.htmlentities(mysql_escape_string(trim($_POST["image"]))).'" ,"'.htmlentities(mysql_escape_string(trim($_POST["comment"]))).'" ) ';
$result = mysql_query($query) or die (mysql_error());


//AFFICHE


$query = 'SELECT titre,image,comment FROM news';
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array ($result))

{
echo stripslashes($row[titre]).' - '.stripslashes($row[image]).' - '.stripslashes($row[comment]).
}



?>


Le htmlentities() permet d' empècher l' éxécution de code l' or de l' affichage( touts les caractère du type <,> etc... seront transformé en leurs équivalents &lt;,&gt;... Attention, comme je te l' ai fait, tu ne peux enregistrer aucun lien etc dans ta base...le lien donnerait => &lt; a href="ta_ page"&gt;Lien&lt;/a&gt; lors de l' affichage...)

Le trim() permet de supprimer les espaces en début et en fin de chaine de caractères afin d' économiser un peu la base de donné...

Voila j' éspère avoir été clair...

Bye...
jackbocar
le 20/02/2005 à 18:22
jackbocar
Re Bonjour,

Je ne comprends pas comment on peux faire des injections sql dans un script à partir du moment ou c'est uniquement moi qui envoie les news sur le site.
D'autre part, si je veux mettre un lien vers une page de mon site, je ne peux pas avec ces protections, j'ai bien compris ?
C'est accès est unique et il n'y a pas de script pour poster un commentaire.

Et en plus :

Avec ces codes, je peux les utiliser pour d'autres applications tels qu'un script de commentaires ou un livre d'or et ils seront de ce fait sécurisés.

Merci encore

Jack Bocar
keitarosan
le 20/02/2005 à 21:36
keitarosan
ah forcement, si ce n'est que toi qui mets les news ^^...

Dans ce cas, fait juste le mysql_protect_query(), ca sera suffisant, et comme ca tu pourras mettre tes liens, et tout ce que tu veux ^^.

Pour les autres pages (forums, livre d'or, etc...), la tu mets toutes les protections smiley
C'est pas de la parano, c'est juste que c'est mieux ^^
>> http://projectopensource.free.fr/index.php?m=2&m2=5&s=8 <<
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours