Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 2004
-
3 nov. 2003 à 12:14
Seb33300
Messages postés16Date d'inscriptiondimanche 9 avril 2006StatutMembreDernière intervention25 janvier 2011
-
8 mars 2007 à 22:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
voila c'est tout, en tout cas merci au créateur de cette source, ça ma retirer une belle épine du pied ;)
cs_metalsonic
Messages postés3Date d'inscriptionjeudi 27 février 2003StatutMembreDernière intervention20 avril 2005 25 oct. 2004 à 19:18
Bonjour, j'aimerai savoir comment faire la chose suivante :
J'ai un variable (php) avec du texte que j'ai extraite de ma base de donnée.
J'aimerai la faire passer dans la fonction bbcode et retrouver au final une variable php...
ranouf
Messages postés237Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention31 août 2009 15 oct. 2004 à 01:32
et faire l'inverse ? avoir notre texte au format HTML et le mettre dans une texte area avec les bbcode affiché.
C possible vous pensez ?
Simcamb
Messages postés28Date d'inscriptionjeudi 30 janvier 2003StatutMembreDernière intervention26 janvier 2005 9 juil. 2004 à 15:03
non, je mettais simplement [b]un texte qui contient
un retour à la ligne/b et les balises [b] s'affichaient, sans mettre en gras, mais un ami à corrigé le probleme :
Cherche BBCode, tu devrais trouver ma source ! C'est le formulaire pour insérer du BBCode !
++
maxroucool
Messages postés44Date d'inscriptionjeudi 20 novembre 2003StatutMembreDernière intervention28 janvier 2013 2 juin 2004 à 17:00
et d'autre part, ne connaitriez vous pas un site avec un javascript qui permetterait d'inserer le BBcode?
maxroucool
Messages postés44Date d'inscriptionjeudi 20 novembre 2003StatutMembreDernière intervention28 janvier 2013 2 juin 2004 à 16:58
ben je l'avais deja fais mais ca ne marche pas.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 2 juin 2004 à 14:58
ben fais
nl2br(htmlentities(...)) plutôt que le nl2br dans le htmlentities ...
maxroucool
Messages postés44Date d'inscriptionjeudi 20 novembre 2003StatutMembreDernière intervention28 janvier 2013 2 juin 2004 à 14:40
au debut vous dites "il faut mettre htmlentities() pour enpecher le code html" mais alors comment je peux faire pour qu'il me fasse quand meme les sauts de ligne??
j'ai
echo ''.htmlentities(stripslashes(nl2br($data['message']))).''; et ca ne veut pas marcher, il me marque a la place des sauts de lignes maintenant. donc puis je faire pour respecter les sauts de ligne tout en empechant le code html??
DuncanIdaho
Messages postés98Date d'inscriptionmardi 1 janvier 2002StatutMembreDernière intervention12 février 2008 19 mai 2004 à 18:21
La balise [quote] bugge avec des quotes imbriquées :(
kzimir666
Messages postés44Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention24 septembre 2006 5 mai 2004 à 13:21
Quelqu'un pourrait indiquer un BBcode pour que la balise de type [lien]....../lien détecte si son contenu est du type :
"http://www.site.fr" : ouvrir dans _blank
"page.XXX" : ouvrir dans la même fenetre
"nom@fournisseur.XX" : faire un mailto
S'il vous plaît, je comprend rien aux expressions régulière... :(
Si quelqu'un sait le faire, ce serait vraiment sympa de l'indiquer... merci encore pour votre aide !
Quand j'interprete le truc, seul, ça marche. Mais quand il y en a plusieurs, ça fait n'importe quoi... ça prend la premiere et la derniere balise j'ai l'impression.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 2 févr. 2004 à 07:43
les & gt ; et & lt ; ne sont pas passés apparemment, mais tu peux plus facilement utiliser htmlentities et nl2br
chapodepay
Messages postés7Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention18 avril 2007 2 févr. 2004 à 04:22
oui il y a des risques d'injections de commande MySql lorsque les données sont enregistrées en BDD, sauf sous php4 (comme dit) car il filtre (par défaut, si on touche pas) les données transmisent.
Sinon, ou pour être sûr, un parsage des infos dont add_slach(), virer les # etc...
le must étant de faire une fonction filtre comme :
function filtre($var){
$var = ereg_replace("<","<",$var);
$var = ereg_replace(">",">",$var);
$var = ereg_replace("#","",$var);
$var = ereg_replace("$","",$var);
$var = stripslashes($var);
return $var;
}
utilisez : $texte=filtre($_POST['texte_du_form']);
je pense déjà que cela suffit. (kon me prévienne sinon)
A la question, est-il possible d'utilisez l'html en sécurité, je serais tenté de répondre non, car il y a toujours des parades aux parsage de certaine balise (script surtout), d'ou le bbcode.
libre a toi de faire autant de relation html <-> bbcode avec tes balises a toi.
Magicking
Messages postés195Date d'inscriptionvendredi 13 octobre 2000StatutMembreDernière intervention 8 juillet 2004 6 nov. 2003 à 22:24
Poly l'SQL INJECTION consiste a rajouter un truc dans un code comme :
mysql_query(stripslashes("SELECT id,nom WHERE pseudo='.$_[POST]['pseudo'].' AND password='.$_[POST]['password'].'"));
Si $_[POST]['pseudo'] vaut Administrateur'# le reste de ta requete après $_[POST]['pseudo'] sera considere comme commentaire a cause du # et le slash de ' sera enlevé.
Sont mieu pour eviter ce genre de trucs mais bon il doit y avoir d'autre moyen encore
mysql_query("SELECT id,nom WHERE pseudo='.$_[POST]['pseudo'].' AND password='.$_[POST]['password'].'");
mysql_query(stripslashes("SELECT id,nom WHERE password='.$_[POST]['password'].' AND pseudo='.$_[POST]['pseudo'].'"));
le code de polyprog ne peuvent pas fonctionner, et ce n'est pas ça du sql injection.
le sql injection, c'est purelent injecter du code sql dans un reuete, et depuis php4 ce n'est plus possible.
Pour info, si on envoi $sql="insert into ..."; php va le comprendre comme $php="insert into ..."
Je ne dis pas que c'est ce qui va se passer, mais c'est comme ça que php va le prendre. ce ne sera pas une variable mais une valeur. c'est different.
concernant le sql injection, ya tout ce qu'il faut comme article sur www.underground-fr.info
flashfun
Messages postés296Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention11 septembre 2004 6 nov. 2003 à 22:02
Pour la solution de Poly Progr@ms
Dans mon cela fonctionne parfaitement car mes requetes sql sont généré par des programme en php.
J'aimerais bien savoir comment vous faite pour vos requetes????
Magicking
Messages postés195Date d'inscriptionvendredi 13 octobre 2000StatutMembreDernière intervention 8 juillet 2004 6 nov. 2003 à 21:29
Dans le fichier de "include/bbcode.php" de phpBB on peut voir tous comment eux ils le font.
J'ajoute que avec preg_replace on peut utilise un tableau http://www.php.net/preg_replace
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 6 nov. 2003 à 17:10
oui t'as raison, mon message était agressif, désolé, je m'en excuse. quant à la SQL injection (j'ignorais qu'on appelait ça comme ça), c'est ce dont on a parlé plus haut, et i lfaut tt de même des circonstances très spécifiques pour que ça marche. je pense qu'un tt petit peu d'attention devrait permettre de s'en prémunir aisément. (notament avec add_slashes)
Poly Progr@ms
Messages postés8Date d'inscriptiondimanche 21 septembre 2003StatutMembreDernière intervention25 janvier 2005 6 nov. 2003 à 17:04
hum... on appelle ca le sql injection... mais je sais pas l'utiliser LOL :p...
dsl je me suis emmeler les pinceaux : ca ne peut pas marcher, comme tu l'as expliqué !
mais bon ton message m'avait l'air un peu agressif : je m'excuse j'ai dit une connerie mais c'est pas une raison...
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 6 nov. 2003 à 16:58
absolument n'importe quoi ce que tu dis Poly Programs.
comment veux tu qu'une chaîne de caractère se transforme en instruction PHP ???
Poly Progr@ms
Messages postés8Date d'inscriptiondimanche 21 septembre 2003StatutMembreDernière intervention25 janvier 2005 6 nov. 2003 à 16:37
& que vous ne fassiez aucune transformation... vous aurez alors :
$sql = "INSERT INTO forums VALUES('titre','blabla...')"; $sql="DROP TABLE forum"; $nimp="'...blabla','auteur');
$res = mysql_query($sql);
il execute le drop table...
alors bon, je trouve pas ca très sécur mwa :p
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 6 nov. 2003 à 08:02
bah, pas malins, je les trouve plutôt admirable ^^
ok, j'en avait entendu parler de cette option en plus, merci du rappel.
quant à la config de chaque serveur, c vrai que pafs c embetant, pr un de mes sites j'ai du éditer toutes les commandes include() pour y mettre un répertoire absolu, depuis home/ ... (ss nux) ça c énervant qd meme.
mais c bon à savoir: donc il faut utiliser ini_set pr se prémunir contre ce genre de blagues.
cs_goa103
Messages postés8Date d'inscriptionjeudi 29 août 2002StatutMembreDernière intervention 5 novembre 2003 5 nov. 2003 à 18:29
Merci pour l'info, ils ont encore changé la config du php.ini ! Je comprends pour les perfs mais ça impose de mettre à jour son code en fonction du serveur. La seule solution c'est d'utiliser ini_set pour fixer cette valeur soit même. Ils sont pas malins chez php parfois :(
Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 20041 5 nov. 2003 à 18:06
Kirua >> Il y a un paramètre dans le php.ini qui s'appelle magic_quotes_gpc Le GPC indique GET, POST COOKIE. Si ce paramètre est sur On. Le serveur ajoute automatiquement des slashes à tous les GET, POST et COOKIE. Ce qui évite d'interpréter des mauvais codes ^^
(il est sur Off depuis les versions 4.3.x je crois pour des raisons de performance)
Pour trancher, un INSERT ne peut en aucun cas executer une autre commande passé en argument.
L'argument reste un argument, et n'est pas interpreté. c'est aussi simple que cela.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 5 nov. 2003 à 14:42
goa, je vois pas pq il ferait un addslashes lui-même, ce serait gênant en tt cas, car un langage ne devrait jamais faire ce que l'utilisateur ne lui demande pas explicitement, sinon comment faire les choses basiques quand on en a besoin ?
cs_goa103
Messages postés8Date d'inscriptionjeudi 29 août 2002StatutMembreDernière intervention 5 novembre 2003 5 nov. 2003 à 09:37
Bonjour,
Bon j'ai essayé de comprendre votre problème mais j'avoue avoir un peu de mal. Quel rapport entre le commentaire contenant du BBCode et votre DROP MySQL ? Je ne vois vraiment pas comment ça peut vous gêner qu'un commenraire ressemble à une requête, vous n'allez quand même pas faire un mysql_query dessus ??? Vous faîtes un INSERT, si votre serveur PHP est bien configuré l'addslashes est automatiquement fait, si ca n'est pas le cas je vous conseille de le mettre à jour.
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 5 nov. 2003 à 07:59
MySQL gère les commentaire? je pense pas, de tte façon, il faut voir la requête comme une chaîne totalement indépendante envoyée par socket au serveur SQL, c'est plus rien à voir avec PHP, le SQL est un langage à part entière, et php est l'intermédiaire. je pense pas que les commentaires soient gérés. ceci dit, j'ai jamais vérifié ça.
flashfun
Messages postés296Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention11 septembre 2004 4 nov. 2003 à 23:32
Perso je ne l'ai jamais fait, je vais l'éssayer dès que j'aurrais le temps.
Mais je pense qu'au bout de plusieurs essais on peut réussir à faire quelque chose.
...Mais si on rajoute le commentaire en php
"INSERT INTO table VALUES('$var')" ou var vaut " '); DROP table; //"
ça donne comme requête que le serveur SQL reçoit:
"INSERT INTO table VALUES(''); DROP table;//)"
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 4 nov. 2003 à 22:16
j'ai lu le contraire sur PHP.net, ça parlait de MySQL seulement, mais de toute façon je suppose que c'est ce que tu utilises.
quant à l'effacement, il suffit d'effectuer un "add slashes" pour s'en prémunir, rien à voir avec htmlentities (qui ne fait pas ça)
encore une chose: je comprends vraiment pas comment c'est possible, à part dans une requête type SELECT, puisque là les paramètres de recherche (WHERE) seront à la fin, auquel cas c'est possible en effet, mais si les paramètres sont dans VALUES lors d'une requête INSERT, je vois mal comment on pourrait arriver à une requête qui ne bug pas O_o. Exemple d'un développeur pressé ou imprudent qui n'effectue pas de add slashes:
"INSERT INTO table VALUES('$var')" ou var vaut " '); DROP table; "
ça donne comme requête que le serveur SQL reçoit:
"INSERT INTO table VALUES(''); DROP table;)"
tu vois, il y a une parenthèse de trop à la fin de la requête, et ça, MySQL ne l'acceptera pas, c'est très capricieux ^^
du moins, c'est ce que je pense et ce que j'ai pu observer, et à ma connaissance, il n'y a pas de mode "safe" avec MySQL qui le rende si pointilleux, c'est ainsi, non ?
flashfun
Messages postés296Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention11 septembre 2004 4 nov. 2003 à 20:46
Kirua>>
On peut insérer 2 commande à la suite, en écrivant quelquchose du genre :
');DROP Table...
C'est possible, car on m'a déja détruite une table d'un livre d'or que j'avais fait (trop rapidement).
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 4 nov. 2003 à 19:18
nah je parlais des htmlentities et des nl2br, juste ça ;-) un autre avantage auquel je pense là: la place. en effet, un é occupe un octet, or après htmlentities: é bcp plus d'octets. donc pr la bdd c'est plus léger de ne pas sauve la forme transformée.
ce que je voulais dire par réutilisation, c'est tt simplement que, si tu voulais créer u option "mail" pr ton livre d'or / forum je sais pas quoi, qui envoie le message posté par mail à certaines adresses, vaudra mieux l'envoyer en mode texte (si tu n'y mets pas de bb code) auquel cas, faut pas utiliser htmlentities.
cs_goa103
Messages postés8Date d'inscriptionjeudi 29 août 2002StatutMembreDernière intervention 5 novembre 2003 4 nov. 2003 à 18:41
Pour une question de perfs on peut vouloir transformer avant insertion. Rien n'empêche de récupérer le BBCode original pour mettre à jour. [b] -> -> [b]. Un serait transformé en de toutes façons. -> .
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 4 nov. 2003 à 16:31
j'approuve la décision de Black Wizard, il ne faut pas transformer avant d'introduire dans la BDD, si tu devais décider de changer le mode d'affichage, ça pourrait se révéler embêtant.
quant au risque d'un drop table, htmlentities de résout absolument pas le problème (pas vu de balise html DROP...) et puis, de tte manière, qd tu l'ajoute à la table, tu mets INSERT or le server sql de mySQL ne supporte pas les multi-commandes.
autre chose, tu l'ajoutes comme ça;
$requete = "INSERT INTO table VALUES('...', '...', '...', '...' ....)"
tu vois, les valeurs sont entre ' ', donc il n'y a pas d'interprétation possible
cs_goa103
Messages postés8Date d'inscriptionjeudi 29 août 2002StatutMembreDernière intervention 5 novembre 2003 4 nov. 2003 à 08:50
Pour les liens :
target=blank -> target="_blank", il faut mettre les valeurs entre guillements, je ne suis pas certain que blank fonctionne, en HTML c'est _blank de toutes les façons
Pour les quotes :
Il existe le tag blockquote pour les citations, on peut ajouter des bordures, changer la couleur du fond, simplement en utilisant des feuilles de style CSS. Pas besoin d'utiliser une table :)
Voilà bon code il y a quelques heures encore je me dépatouillais avec les BBCode pour un projet :).
flashfun
Messages postés296Date d'inscriptionmercredi 10 septembre 2003StatutMembreDernière intervention11 septembre 2004 3 nov. 2003 à 23:39
Je pense que pour diminuer les risques de se faire suprimé les table dans les base de donné (quand un message contient par exemple: ';DROP table...;),
il faut transformer l'information avant de l'enregistrer dans la base de donnée.
perso je te conseil d'introduire dans la bdd sans transformer, et ensuite kan tu recup, là tu transforme.
Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 20041 3 nov. 2003 à 22:07
OK merci.
Donc si j'ai bien compris ça donne :
//--------------------------------------------------
// POUR METTRE DANS LA BASE DE DONNEES ::
//--------------------------------------------------
$text = htmlentities($_POST["text"]);
// Ensuite on met dans la base de données
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 3 nov. 2003 à 17:41
et n'oublei pas la fonction nl2br qui permet de convertir les retours chariot dans les textarea en
, c'est pr garder la mise en page, mais attention, nl2br est à mettre APRES htmlentities, sinon les
s'affichent en clair, puisque les < et > sont remplacés.
oui, rajoute
$text = htmlentities($text);
juste apres
function bbcode($text) {
Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 20041 3 nov. 2003 à 13:34
Autre chose, je pense que tu sais, comment on fé pour désactiver le HTML dans les forums par exemple ?
Tomcube
Messages postés311Date d'inscriptionvendredi 4 avril 2003StatutMembreDernière intervention14 septembre 20041 3 nov. 2003 à 12:14
C'est exactement ce ke je recherchais merci !! ^^
Est-ce que c'est comme ça que c'est fait dans les forums comme phpbb ?
Sinon, est-ce qu'il y a d'autres codes commen celui ci qui permettent l'affichage sécurisé des balises HTML ?
8 mars 2007 à 22:41
j'aimerai ajouter une balise [size=xx] avec xx correspondant a un nombre entier pour remplacer par
par contre je suis nul niveau syntaxe à mettre dans le preg_replace, quelqu'un pourrais m'aider ?
2 janv. 2007 à 21:47
A+
7 nov. 2006 à 14:30
une vrai bete meme sur flash :p
28 juin 2006 à 14:20
28 juin 2006 à 14:16
Cette fonction bug, chez moi ça écrit en dur: [url]http://blabla.com/url et non un lien hypertexte.
Porque ?
8 janv. 2005 à 09:56
$text = preg_replace("/\[quote=(.+?)\]/", "<center> Message de $1 : |----
", $text);
$text = preg_replace("/\[\/quote\]/", "
</center>", $text);
voila c'est tout, en tout cas merci au créateur de cette source, ça ma retirer une belle épine du pied ;)
25 oct. 2004 à 19:18
J'ai un variable (php) avec du texte que j'ai extraite de ma base de donnée.
J'aimerai la faire passer dans la fonction bbcode et retrouver au final une variable php...
Comment faire ?
Merci
15 oct. 2004 à 01:33
15 oct. 2004 à 01:32
C possible vous pensez ?
9 juil. 2004 à 15:03
un retour à la ligne/b
et les balises [b] s'affichaient, sans mettre en gras, mais un ami à corrigé le probleme :
remplacer $text = preg_replace("/\[b\](.+?)\[\/b\]/", " $1 ", $text);
par $text = preg_replace("/\[b\](.+?)\[\/b\]/s", "$1", $text);
(j'ai ajouté le petit s après le /), et faire de meme pour les tags devant gerer un retour à la ligne
8 juil. 2004 à 12:00
C'est normal, cette boîte de dialogue ne permet pas les sauts de lignes et est limité en caractères !
++
8 juil. 2004 à 11:52
si je fais salut ça fonctionne, mais pas [b]salut toi,
ça va ?/b
vous savez d'où ça peut venir
8 juil. 2004 à 10:00
Cherche BBCode, tu devrais trouver ma source ! C'est le formulaire pour insérer du BBCode !
++
2 juin 2004 à 17:00
2 juin 2004 à 16:58
2 juin 2004 à 14:58
nl2br(htmlentities(...)) plutôt que le nl2br dans le htmlentities ...
2 juin 2004 à 14:40
j'ai
echo ''.htmlentities(stripslashes(nl2br($data['message']))).''; et ca ne veut pas marcher, il me marque a la place des sauts de lignes maintenant. donc puis je faire pour respecter les sauts de ligne tout en empechant le code html??
19 mai 2004 à 18:21
5 mai 2004 à 13:21
"http://www.site.fr" : ouvrir dans _blank
"page.XXX" : ouvrir dans la même fenetre
"nom@fournisseur.XX" : faire un mailto
pareil avec la balise [lien="......"]blabla/lien
S'il vous plaît, je comprend rien aux expressions régulière... :(
Si quelqu'un sait le faire, ce serait vraiment sympa de l'indiquer... merci encore pour votre aide !
5 mai 2004 à 11:41
pour le bug, je sais pas trop...
5 mai 2004 à 11:34
Je crois qu'on appelle ça les masques et j'y pige rien...
Sinon, j'ai un problème avec une de mes lignes pour BBcode :
Quand j'interprete le truc, seul, ça marche. Mais quand il y en a plusieurs, ça fait n'importe quoi... ça prend la premiere et la derniere balise j'ai l'impression.
2 févr. 2004 à 07:43
2 févr. 2004 à 04:22
Sinon, ou pour être sûr, un parsage des infos dont add_slach(), virer les # etc...
le must étant de faire une fonction filtre comme :
function filtre($var){
$var = ereg_replace("<","<",$var);
$var = ereg_replace(">",">",$var);
$var = ereg_replace("#","",$var);
$var = ereg_replace("$","",$var);
$var = stripslashes($var);
return $var;
}
utilisez : $texte=filtre($_POST['texte_du_form']);
je pense déjà que cela suffit. (kon me prévienne sinon)
A la question, est-il possible d'utilisez l'html en sécurité, je serais tenté de répondre non, car il y a toujours des parades aux parsage de certaine balise (script surtout), d'ou le bbcode.
libre a toi de faire autant de relation html <-> bbcode avec tes balises a toi.
6 nov. 2003 à 22:24
mysql_query(stripslashes("SELECT id,nom WHERE pseudo='.$_[POST]['pseudo'].' AND password='.$_[POST]['password'].'"));
Si $_[POST]['pseudo'] vaut Administrateur'# le reste de ta requete après $_[POST]['pseudo'] sera considere comme commentaire a cause du # et le slash de ' sera enlevé.
Sont mieu pour eviter ce genre de trucs mais bon il doit y avoir d'autre moyen encore
mysql_query("SELECT id,nom WHERE pseudo='.$_[POST]['pseudo'].' AND password='.$_[POST]['password'].'");
mysql_query(stripslashes("SELECT id,nom WHERE password='.$_[POST]['password'].' AND pseudo='.$_[POST]['pseudo'].'"));
6 nov. 2003 à 22:19
les antislash sont virés du message...
6 nov. 2003 à 22:18
le sql injection, c'est purelent injecter du code sql dans un reuete, et depuis php4 ce n'est plus possible.
Pour info, si on envoi $sql="insert into ..."; php va le comprendre comme $php="insert into ..."
Je ne dis pas que c'est ce qui va se passer, mais c'est comme ça que php va le prendre. ce ne sera pas une variable mais une valeur. c'est different.
concernant le sql injection, ya tout ce qu'il faut comme article sur www.underground-fr.info
6 nov. 2003 à 22:02
Dans mon cela fonctionne parfaitement car mes requetes sql sont généré par des programme en php.
J'aimerais bien savoir comment vous faite pour vos requetes????
6 nov. 2003 à 21:29
J'ajoute que avec preg_replace on peut utilise un tableau http://www.php.net/preg_replace
6 nov. 2003 à 17:10
6 nov. 2003 à 17:04
dsl je me suis emmeler les pinceaux : ca ne peut pas marcher, comme tu l'as expliqué !
mais bon ton message m'avait l'air un peu agressif : je m'excuse j'ai dit une connerie mais c'est pas une raison...
6 nov. 2003 à 16:58
comment veux tu qu'une chaîne de caractère se transforme en instruction PHP ???
6 nov. 2003 à 16:37
blabla...')"; $sql="DROP TABLE forum"; $nimp="'...blabla
& que vous ne fassiez aucune transformation... vous aurez alors :
$sql = "INSERT INTO forums VALUES('titre','blabla...')"; $sql="DROP TABLE forum"; $nimp="'...blabla','auteur');
$res = mysql_query($sql);
il execute le drop table...
alors bon, je trouve pas ca très sécur mwa :p
6 nov. 2003 à 08:02
ok, j'en avait entendu parler de cette option en plus, merci du rappel.
quant à la config de chaque serveur, c vrai que pafs c embetant, pr un de mes sites j'ai du éditer toutes les commandes include() pour y mettre un répertoire absolu, depuis home/ ... (ss nux) ça c énervant qd meme.
mais c bon à savoir: donc il faut utiliser ini_set pr se prémunir contre ce genre de blagues.
5 nov. 2003 à 18:29
5 nov. 2003 à 18:06
(il est sur Off depuis les versions 4.3.x je crois pour des raisons de performance)
5 nov. 2003 à 14:55
L'argument reste un argument, et n'est pas interpreté. c'est aussi simple que cela.
5 nov. 2003 à 14:42
5 nov. 2003 à 09:37
Bon j'ai essayé de comprendre votre problème mais j'avoue avoir un peu de mal. Quel rapport entre le commentaire contenant du BBCode et votre DROP MySQL ? Je ne vois vraiment pas comment ça peut vous gêner qu'un commenraire ressemble à une requête, vous n'allez quand même pas faire un mysql_query dessus ??? Vous faîtes un INSERT, si votre serveur PHP est bien configuré l'addslashes est automatiquement fait, si ca n'est pas le cas je vous conseille de le mettre à jour.
5 nov. 2003 à 07:59
4 nov. 2003 à 23:32
Mais je pense qu'au bout de plusieurs essais on peut réussir à faire quelque chose.
...Mais si on rajoute le commentaire en php
"INSERT INTO table VALUES('$var')" ou var vaut " '); DROP table; //"
ça donne comme requête que le serveur SQL reçoit:
"INSERT INTO table VALUES(''); DROP table;//)"
4 nov. 2003 à 22:16
quant à l'effacement, il suffit d'effectuer un "add slashes" pour s'en prémunir, rien à voir avec htmlentities (qui ne fait pas ça)
encore une chose: je comprends vraiment pas comment c'est possible, à part dans une requête type SELECT, puisque là les paramètres de recherche (WHERE) seront à la fin, auquel cas c'est possible en effet, mais si les paramètres sont dans VALUES lors d'une requête INSERT, je vois mal comment on pourrait arriver à une requête qui ne bug pas O_o. Exemple d'un développeur pressé ou imprudent qui n'effectue pas de add slashes:
"INSERT INTO table VALUES('$var')" ou var vaut " '); DROP table; "
ça donne comme requête que le serveur SQL reçoit:
"INSERT INTO table VALUES(''); DROP table;)"
tu vois, il y a une parenthèse de trop à la fin de la requête, et ça, MySQL ne l'acceptera pas, c'est très capricieux ^^
du moins, c'est ce que je pense et ce que j'ai pu observer, et à ma connaissance, il n'y a pas de mode "safe" avec MySQL qui le rende si pointilleux, c'est ainsi, non ?
4 nov. 2003 à 20:46
On peut insérer 2 commande à la suite, en écrivant quelquchose du genre :
');DROP Table...
C'est possible, car on m'a déja détruite une table d'un livre d'or que j'avais fait (trop rapidement).
4 nov. 2003 à 19:18
ce que je voulais dire par réutilisation, c'est tt simplement que, si tu voulais créer u option "mail" pr ton livre d'or / forum je sais pas quoi, qui envoie le message posté par mail à certaines adresses, vaudra mieux l'envoyer en mode texte (si tu n'y mets pas de bb code) auquel cas, faut pas utiliser htmlentities.
4 nov. 2003 à 18:41
4 nov. 2003 à 16:31
quant au risque d'un drop table, htmlentities de résout absolument pas le problème (pas vu de balise html DROP...) et puis, de tte manière, qd tu l'ajoute à la table, tu mets INSERT or le server sql de mySQL ne supporte pas les multi-commandes.
autre chose, tu l'ajoutes comme ça;
$requete = "INSERT INTO table VALUES('...', '...', '...', '...' ....)"
tu vois, les valeurs sont entre ' ', donc il n'y a pas d'interprétation possible
4 nov. 2003 à 08:50
target=blank -> target="_blank", il faut mettre les valeurs entre guillements, je ne suis pas certain que blank fonctionne, en HTML c'est _blank de toutes les façons
Pour les quotes :
Il existe le tag blockquote pour les citations, on peut ajouter des bordures, changer la couleur du fond, simplement en utilisant des feuilles de style CSS. Pas besoin d'utiliser une table :)
Voilà bon code il y a quelques heures encore je me dépatouillais avec les BBCode pour un projet :).
3 nov. 2003 à 23:39
il faut transformer l'information avant de l'enregistrer dans la base de donnée.
3 nov. 2003 à 22:17
3 nov. 2003 à 22:07
Donc si j'ai bien compris ça donne :
//--------------------------------------------------
// POUR METTRE DANS LA BASE DE DONNEES ::
//--------------------------------------------------
$text = htmlentities($_POST["text"]);
// Ensuite on met dans la base de données
//--------------------------------------------------
// POUR AFFICHER ::
//--------------------------------------------------
$text = bbcode($tableau_query["text"]);
$text = nl2br($text);
echo $text;
3 nov. 2003 à 17:41
, c'est pr garder la mise en page, mais attention, nl2br est à mettre APRES htmlentities, sinon les
s'affichent en clair, puisque les < et > sont remplacés.
exemple:
echo nl2br(htmlentities($text_sans_html));
3 nov. 2003 à 13:37
$text = htmlentities($text);
juste apres
function bbcode($text) {
3 nov. 2003 à 13:34
3 nov. 2003 à 12:14
Est-ce que c'est comme ça que c'est fait dans les forums comme phpbb ?
Sinon, est-ce qu'il y a d'autres codes commen celui ci qui permettent l'affichage sécurisé des balises HTML ?