entrer du texte , risques , etc

Le
jerome balti
bonjour

j'essaie de faire des petites applications simple pour mettre quelques
infos en lignes entrées aussi en ligne par un browser

je me pose cependant un certains nombres de questions philosophique

par exemple , je fais un formulaire en html, j entre une chaine de
caractere , traitee par une page php , enregistrée dans un fichier
ttexte , relue par ailleurs et affichée à nouveau dans le browser

ex, lecture du fichier, affichage de la chaine dans la page puis dans
le champ du formulaire pour modification

<body>
<p>&eacute;crire ci dessous le contenu du fichier</p>
<?php
$fichier=fopen("text01.txt","r");
$texte01=fgets($fichier);
fclose ($fichier);
print 'texte : <br>';
print $texte01;
print' <form method="post" action="record01.php"> <hr>
<p><strong>TEXTE</strong></p>';
print' <p>&nbsp; Objet :&nbsp; <input name="objet"
VALUE="'.$texte01.'"> <br> <br>';
print' <INPUT name="submit" TYPE="submit"
VALUE="Enregistrer"></p></font></form>';
?><p>&nbsp; </p>

</body>


et apres envoi du formulaire , traitement pour remplacer le contenu du
fichier par la nouvelle entrée

<body>
<?
$objet=$_POST['objet'];
$fichier=fopen("text01.txt","w+");
fputs($fichier,$objet);
fclose ($fichier);
?>
<meta http-equiv="refresh" content="0;URL=intext01.php">
</body>


Bon, ça fonctionne , mais il y a des choses qui me chagrinent là dedans
- j'ai rentré une chaine de caractère en texte et elle se retrouve dans
le fichier comme rentrée . Quand je l affiche à nouveau dans la page,
elle sera affichée telle quelle . Je veux dire par exemple , s'il y a
des accents (ex "é") au moment de l'affichage ils seront écrits comme
si j'avais mis "é" dans mon source et pas "&eacute;"

à la limite , on s'en fout un peu, tout reste en france entre français
etc , mais quand même


- le deuxième point est qu'on peut rentrer du code qui sera exécuté
lors de l'affichage de la page ce qui peut lui faire faire des choses
bizarres, risquées ou tout planter (par exemple si on entre juste
"<href " , sans refermer le tag dans l'exemple ça plante le
formulaire et on est coincé

bref , que devrais je faire pour obtenir le même résultat de manière un
plus robuste ?

merci !
par ailleurs (voir mon autre post) je voudrais voire comment faire des
choses similaires avec des "textarea" , ou entrer de texte
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
O.L.
Le #22081761
jerome balti a exposé le 16/02/2008 :
bonjour

j'essaie de faire des petites applications simple pour mettre quelques infos
en lignes entrées aussi en ligne par un browser


[snip]
Bon, ça fonctionne , mais il y a des choses qui me chagrinent là dedans
- j'ai rentré une chaine de caractère en texte et elle se retrouve dans le
fichier comme rentrée . Quand je l affiche à nouveau dans la page, elle sera
affichée telle quelle . Je veux dire par exemple , s'il y a des accents (ex
"é") au moment de l'affichage ils seront écrits comme si j'avais mis "é" dans
mon source et pas "&eacute;"

à la limite , on s'en fout un peu, tout reste en france entre français etc
... , mais quand même


- le deuxième point est qu'on peut rentrer du code qui sera exécuté lors de
l'affichage de la page ce qui peut lui faire faire des choses bizarres,
risquées ou tout planter (par exemple si on entre juste "<href " , sans
refermer le tag dans l'exemple ça plante le formulaire et on est coincé

bref , que devrais je faire pour obtenir le même résultat de manière un plus
robuste ?



Solution simple qui devrait résoudre ces 2 problèmes :

remplacer :
$objet=$_POST['objet'];
par :
$objet=html_entities(stripslashes($_POST['objet']), ENT_QUOTES);

(le stripslashes est là pour résoudre au passage le bug qui surgira
très probablement si tu entres un texte avec des guillemets ou des
apostrophes)

@+

--
Olivier Ligny
www.virgal.net (mondes virtuels 3D)
O.L.
Le #22081751
O.L. a utilisé son clavier pour écrire :
remplacer :
$objet=$_POST['objet'];
par :
$objet=html_entities(stripslashes($_POST['objet']), ENT_QUOTES);



Oups désolé, il faut lire htmlentities et non pas html_entities !

--
Olivier Ligny
www.virgal.net (mondes virtuels 3D)
Patrick 'Zener' Brunet
Le #22081731
Bonjour.

"jerome balti"

j'essaie de faire des petites applications simple pour mettre
quelques infos en lignes entrées aussi en ligne par un browser

je me pose cependant un certains nombres de questions
philosophique

par exemple , je fais un formulaire en html, j entre une chaine
de caractere , traitee par une page php , enregistrée dans un
fichier ttexte , relue par ailleurs et affichée à nouveau dans le
browser
[...]



Donc bien sûr, il faut dans le traitement convertir tous les caractères en
entités pour générer du HTML valide, mais ce n'est pas tout.

Bien sûr, si vous n'interdisez pas d'entrer des tags HTML, il faut aussi
valider le code syntaxiquement, sinon ça peut casser votre page. Ca peut
être complexe...
Voyez ce qui se fait dans les divers wiki, forums et sites avec saisie de
commentaires, où on préfère fournir des commandes pour introduire des
balises spéciales à partir desquelles le serveur peut ensuite générer du
HTML valide.

L'avantage est aussi de restreindre ce qui peut être inséré, ce qui vous
évitera de voir de parfaits inconnus utiliser votre site comme pompe à
virus, comme page de pub pour sites pornos ou supermarché du viagra online,
comme plate-forme d'échange de warez, mp3z, divxz et même de média
pédophiles ou terroristes, ou comme relai d'actes de piraterie...

Vous devrez tout de même assurer une modération permanente, mais elle sera
sans doute moins fastidieuse ;-)

--
Cordialement.
--
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe
Pierre Goiffon
Le #22081661
Patrick 'Zener' Brunet wrote:
j'essaie de faire des petites applications simple pour mettre
quelques infos en lignes entrées aussi en ligne par un browser



Donc bien sûr, il faut dans le traitement convertir tous les caractères en
entités pour générer du HTML valide, mais ce n'est pas tout.



Non, non et non ! Pourquoi donc s'enquiquiner avec les entités alors que
bien paramétrer le codage utilisé suffit ? Lire :
http://pgoiffon.free.fr/info/i18n/web-charset_html.php

Bien sûr, si vous n'interdisez pas d'entrer des tags HTML, il faut aussi
valider le code syntaxiquement, sinon ça peut casser votre page. Ca peut
être complexe...



En effet... En plus du prb de validité du code html saisi, il faut
penser à toutes les possibilités de piéger des utilisateurs... Pour la
validité du HTML, il doit y avoir moyen d'utiliser Tidy ? Et pour le
reste, le plus simple est je crois une liste blanche de balises
autorisées...
jerome balti
Le #22081341
remplacer :
$objet=$_POST['objet'];
par :
$objet=htmlentities(stripslashes($_POST['objet']), ENT_QUOTES);



merci de m'indiquer la fonction
il y a tellement de doc dispo sur le sujet que je n'arrive pas toujours
à mettre le nez sur ce que je cherche ;-)

(le stripslashes est là pour résoudre au passage le bug qui surgira très
probablement si tu entres un texte avec des guillemets ou des apostrophes)



oui, celui là je l'avais déjà eu la semaine d'avant ;-)
jerome balti
Le #22081331
merci

Et pour le reste, le plus
simple est je crois une liste blanche de balises autorisées...




tiens pour la liste blanche...
je remarque que les modules de blogs, etc... utilisent souvent des
systèmes du genre :

l'utilisateur tape des balises similaire à HTML dans son texte

ex [b][/b] pour <b></b> ... etc

pour le traitement de la saisie, y a t il une fonction qui remplace une
un groupe de caractere par un autre dans une chaine pour faire la
substitution facilement ?
(je présume que oui, je vais fouiner)
Patrick 'Zener' Brunet
Le #22081281
Bonsoir.

"jerome balti"
merci

> Et pour le reste, le plus
> simple est je crois une liste blanche de balises
> autorisées...


tiens pour la liste blanche...
je remarque que les modules de blogs, etc... utilisent
souvent des systèmes du genre :

l'utilisateur tape des balises similaire à HTML dans
son texte

ex [b][/b] pour <b></b> ... etc




Oui, c'est ce que je suggérais, et ça vous donne le contrôle total des tags
qui peuvent être insérés.

Il ne vous reste plus qu'à commencer par échapper les quotes simples et
doubles sous toutes les formes possibles afin d'être sûr que votre PHP ne se
fasse pas avoir par une injection de code, et dans le pire des cas, ce qu'il
ne traduira pas apparaîtra comme du texte natif.

Vous rajoutez alors un preview et une option de correction, et vous
conciliez ainsi souplesse et sécurité (à la sémantique du contenu près,
c'est un autre problème).

Ah oui, pensez aussi à limiter la quantité de texte, pour éviter la
saturation, et dans ce cas il est sympa de rajouter un compteur de nombre de
caractères restants.
Prévoyez aussi une convention pour les passages à la ligne et sauts de
paragraphe (c'est différent), si vous convertissez en HTML ils seront
perdus, comme sur beaucoup de sites moches qui ne gardent qu'un dégluti
infâme.

--
Cordialement.
--
* Patrick BRUNET www.ipzb.fr
* E-mail: lien sur http://zener131.free.fr/ContactMe
Publicité
Poster une réponse
Anonyme