SÉCURISER UN TEXTE ENREGISTRÉ SUR LE SERVEUR : SUPPRIMER L'EXECUTION DU PHP ET J

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 26 juin 2005 à 20:18
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 - 3 déc. 2005 à 22:26
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/32341-securiser-un-texte-enregistre-sur-le-serveur-supprimer-l-execution-du-php-et-javascript

MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
3 déc. 2005 à 22:26
Merci ImmortalPC pour ta suggestion, ça m'as l'air d'être ce que je cherchais, je vais regarder.

Kevin > Strip_tags va m'épargner les balises d'html que je veux garder : Ok, comme ça les utilisateurs peuvent formater leurs textes
Mais ça va quand même me supprimer les balises que j'auraient interdites : php, script etc... Je ne peux pas les autoriser pour des questions évidentes de sécurité, je ne veux pas les supprimer non plus car si ça se trouve c'est du code source. C'est comme si sur phpcs.com on supprimait toutes les balises php des sources, y'aurait plus de code alors que les gens qui postent les sources ils ne veulent pas pirater le serveur.
Il faut donc que je les garde, mais que je les "désactive"
Mais merci pour ton interêt à la question ;)
cs_Kevin007 Messages postés 40 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 1 octobre 2006
27 nov. 2005 à 10:50
Bonjour bonjour,

Pourquoi ne pas utiliser la fonction strip_tags() et ses deux paramètres ?

strip_tags( $string, '<li><lu>
[etc...]' )

Le deuxième paramètre contient la liste des balises (HTML dans ton cas) à ne pas supprimer.

PS : Si l'option asp_tags de PHP est activée (je sais, il faut être tordu) ta vérification est caduque.

Voilà, A+
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
6 nov. 2005 à 09:56
Salut,
tu utilises les expréssions régulières et preg_replace()
$msg = preg_replace('onmouseout="exp régulière"', '', $msg);
@+
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
5 nov. 2005 à 23:15
j'ai regardé mais ça revient un peu au meme que ce que j'ai fait non ?, on remplace "à la main" après avec strtr non ?
Par contre je serai interessé par si qqn avait des idées pour supprimer les "petits" appels de javascript de ce style : onmouseout="mnuLightOff(this)" enfin les appels de JS par les evenement quoi.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 nov. 2005 à 22:14
ah ok... je comprends mieux ton problème. regarde du côté de http://fr.php.net/manual/fr/function.get-html-translation-table.php

que tu pourras modifier à ta guise (modifier le tableau renvoyé par cette fonction) pour ensuite convertir les balises de ton choix ;-)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
5 nov. 2005 à 21:49
Présentation de la source : "Attention : ça n'empèche pas l'hmtl de s'executer, sinon autant utiliser htmlentities() et ça n'est pas le but..."
Et je n'ai pas trouvé comment faire d'exceptions pour les balises html avec htmlentities
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 nov. 2005 à 21:45
bah htmlentities dans ce cas
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
5 nov. 2005 à 21:33
Ah ok je vois, mais encore une fois ça va pas dsl ;)
C'est un site de programmation, donc dans le forum et tout je vois mal comment les utilisateurs pourront se donner des bouts de code en php ou js par exemple si c'est supprimé. Je veux que ça soit affiché moi, mais pas interprété.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 nov. 2005 à 18:39
rooo la belle bourde, c'est strip_tags à utiliser ;-)

htmlspecialchars enlève tout le html ;-)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
5 nov. 2005 à 18:30
Ben jviens juste d'aller sur nexen pourtant j'ai du louper un truc alors.
Si tu pouvais m'expliquer comment faire, je sais pas, y'a des paramêtres à passer ?
Pendant ce temps jvai la tester.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 nov. 2005 à 18:25
" oui mais moi je veux qu'ils puissent utiliser l'html"

je redis ce que j'ai dit : tu peux utiliser htmlspecialchars :-)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
5 nov. 2005 à 18:08
oui mais moi je veux qu'ils puissent utiliser l'html
En tout cas j'ai pas arreté de demander une fonction comme ça sur les forum et pas de réponse alors :( jlai faite moi meme.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
5 nov. 2005 à 15:18
bah y'a la fonction htmlspecialchars aussi ;-)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
5 nov. 2005 à 15:17
mantalo >> Désolé de ne pas avoir répondu plus tot. Si tu avais lu la présentation de la source tu aurais lu :
"C'est vraiment con et c'est rien de nouveau : ça empèche juste le javascript et le php d'etre interprété (extensible à l'asp)...
Attention : ça n'empèche pas l'hmtl de s'executer, sinon autant utiliser htmlentities() et ça n'est pas le but..."
Car voilà dans un forum par exemple, tu poste un message, et si tu veux tu peux le formater, c'est à dire mettre en gras un passage, souligné etc... Mais tu peux aussi mettre du script Javascript, ou du PHP etc.. Mais avec les scripts n'importe qui peut faire des trucs dangereux, donc il faut interdire le javascript, php etc... et autoriser le html.

En php il existe la fonction htmlentities qui interdit toute balise, donc tout script ET tout code html, ce qui ne me convient pas. Donc j'ai codé moi meme une fonction qui désactive seulement les scripts.
Voilà
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
27 sept. 2005 à 09:37
C'est très bien le Delphi ... ;-) bon un peu caractériel mais bon ... ;-) Normalement je devrai, si tout va bien pouvoir sortir, en fauteuil ( youpi !!! ;-) ), dans 10 semaines ... La patience est une vertue mais c'est un peu comme l'éternité : c'est long surtout vers la fin ... ;-)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 sept. 2005 à 09:13
Ca va, ça va, je me prends la tête avec du Delphi là (c'est nul ce langage, lol).
Tu en as pour combien de temps...?
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
27 sept. 2005 à 09:08
Malalam >> Ouais si on veut ... Je commence à ne plus supporter le fait d'être allongé mais autrement cela va ... ;-) et vous ?
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 sept. 2005 à 09:04
Tien, salut Sjon (ah ben j'ai pas trouvé l'accent là) :-) Ca va ?
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
27 sept. 2005 à 08:39
lol ;-)
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
27 sept. 2005 à 08:31
Pour montrer comment est probablement codé htmlentities() ... (language mis à part) ? ;-)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
26 sept. 2005 à 18:38
je me suis posé et je me pose encore la question également :-)
cs_mantalo Messages postés 15 Date d'inscription mardi 24 février 2004 Statut Membre Dernière intervention 6 septembre 2006
26 sept. 2005 à 12:42
ben moi parcontre je suis un vrai debutant pur et dur. Pour moi la sécurité et primordiale, mais je ne comprend pas lutiliter du script. je ve pas dire quil est inutile mais que je ne comprends pas ce qu'il fait, et a koi ca sert au nivo sécuritaire

Je vous remerci de m'explique et de ne pas me lincher^^.
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
1 juil. 2005 à 08:30
Sael og blesud

>> ??? ( lol ) : hóigh : hi ... ;-) en gaelic ( de mémoire ... lol ) ... ;-)

Sigurjón Bírgir Sigurðssón aka Sjón
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 juil. 2005 à 01:25
Ce qui veut dire ? (lol)
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
1 juil. 2005 à 01:04
Sael og blesud

>> Malalam : ,-) ... hóigh ;-) ...

Sigurjón Bírgir Sigurðssón aka Sjón
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 juin 2005 à 10:26
Hello,

heu non, c'est l'effet "norme XHTML" en fait, lol.
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
30 juin 2005 à 10:24
Tu as raison... et notons que sur le forum de ce site, tout script <SCRIPT>abcdef</script> est remplacé par <SCRIPT><![CDATA[bcdef]]></SCRIPT>. C'est l'effet FreeTextBox.com ... Allez savoir pourquoi. De plus, dans une page, quand tu fais un echo de script PHP, il n'est pas interprété.
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
29 juin 2005 à 14:11
Lis un peu la présentation du code, si on fait ce que tu dis ça supprime meme les balises html, ce que l'on ne veut pas...
Car dans ton cas autant utiliser la fonction htmlentities() et ça revient à ce que tu as dit...

Donc non, ça ne revient pas au meme et ce n'est pas ce qu'on cherche
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
29 juin 2005 à 10:28
Le code paraît compliqué. Il suffit simplement de remplacer les "<" par "<". C'est tout... Y'avais un logiciel qui faisait comme ça. Au final, on a simplement :

function RemoveScriptstr($str) {
return str_replace('<', '>', $str);
}
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
28 juin 2005 à 17:38
Euh petite précision pour ceux qui se poseraient des questions : dans la description du code en haut de la page lorsque j'écrit :
"Comme ça dans la page on a ça :
<?
echo "Hello World !!";
?>"

Les caractères "<" et ">" étaient censé être des codes html ("& l t ;" et "& g t ;") mais ils sont interprétés lors de l'affichage de la page (normal) donc voilà je précise sinon ce qui est écrit n'a pas de sens :S
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
28 juin 2005 à 17:33
Pour votre histoire de <xmp> c'est peut etre pas une bonne idée si c'est pas présent de partout... Mais c'était une bonne idée.

Immortal >> lol la même chose que Malalam et Anthomicro

Merci à tous pour donner des idées en tout cas ;)
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
28 juin 2005 à 12:54
Sael og blesud

>> Malalam : " Ca ne marche plus partout ca, a priori. C'est un element obsolete.
En tous cas ca ne marche pas chez moi lol. " Je présume que c'était pour moi ;-) ... En fait je m'en était servi il y a quelques temps sur un Intranet ( vous savez là où la configuration du parc est " contrôlable " ... ? ;-) ) donc je pense qu'il faudrait effectivement le réécrire sans le xmp mais cela peut donner des idées ... ;-) Par ailleurs je l'ai testé sur windows Mobility 2003 2nd Edition en vm et cela fonctionnait ... ( Bah oui j'étais en esqualle à Manille pour 1h, fallait faire le plein à la pompe ;-), et les aéroports question Wifi c'est le top !!! ;-) ... )

Sigurjón Bírgir Sigurðssón aka Sjón
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 juin 2005 à 10:10
J'ai du mal a saisir ta logique la, Immortal, lol.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 juin 2005 à 10:07
bah c'est pourtant clair lol
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 juin 2005 à 09:55
Bah, Immortal, il vaut mieux une fonction, que tu inclus dand un fichier de fonctions, et que tu appelles quand tu en as besoin.
Ce sera toujours plus simple que de retaper ton code a chaque fois, en modifiant en plus le post en get de temps a autres.
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 juin 2005 à 09:54
dans sa fonction tu mets ce que tu veux, t'as rien à remplacer, je vois donc pas l'utilité de compliquer la chose, surtout en disant que c'est plus simple... non ?!
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
28 juin 2005 à 09:53
Re,
>Anthomicro
tu remplaces $_POST par $_GET et voilà.
Ensuite j'ai dit dans le fichier où l'ontraite ces données.
@+
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 juin 2005 à 09:42
Ca ne marche plus partout ca, a priori. C'est un element obsolete.
En tous cas ca ne marche pas chez moi lol.
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
28 juin 2005 à 00:11
Sael og blesud

Par ailleurs dans le cadre d'un forum géré par des sessions de faire en sorte que le code incriminé soit totalement supprimé ( il faudra cependant pour cela modifier votre function ) pour un utilisateur normal et de l'afficher pour un admin afin de dire aux admins : Attention à ce user ...

Sigurjón Bírgir Sigurðssón aka Sjón
cs_sjon Messages postés 861 Date d'inscription mardi 26 mars 2002 Statut Membre Dernière intervention 29 novembre 2006 1
28 juin 2005 à 00:07
Sael og blesud

Une autre solution intéressante :

function RemoveScriptstr($str)
{
$str = str_replace(array('<script','</script>','<?','?>'), array('<xmp><script','</script></xmp>','<xmp><?','?></xmp>'), $str);
return $str;
}

Cela conserve le multi-ligne éventuel et désactive le script Par ailleurs vous pouvez appliquer un style au xmp via css pour qu'il soit en rouge par exemple ... Et cela permet en plus de concerver les "<" ">" au lieu d'avoir < et > ...

Sigurjón Bírgir Sigurðssón aka Sjón
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
27 juin 2005 à 21:54
Bah y'a qu'à voir ton code, si je passe en $_GET ça fonctionne plus vu que ton code vérifie le $_POST seulement...

En plus ton code remplace tout directement, alors qu'on en a peut-être pas le besoin... Bref le code proposé est bon, tu en as fait un exemple mais pas une généralisation.
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
27 juin 2005 à 21:08
La dès que les infos arrivent elles sont traitées.
Donc je voie pas où est le problème ?
>"ça ne fonctionne pas dans toutes les situations"
Où as tu vu ça !?

+
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
27 juin 2005 à 20:15
Oui ici c'est l'avantage d'une fonction qui est interressant...
Réutilisable facilement
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
27 juin 2005 à 18:06
Ce n'est pas plus simple que sa source, et ça ne fonctionne pas dans toutes les situations :-)
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
27 juin 2005 à 18:00
Salut,
Voici un truc plus simple et automatique
Mettre ceci en haut de la page de récéption :
<?php
if(isset($_POST)){
$_POST = str_replace(array('<script','</script>','<?','?>'), array('<script','</script>','<?','?>'), $_POST);
}
?>
@+
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
26 juin 2005 à 23:16
;) merci c'est sympa

pour la modif je vais la faire merci
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
26 juin 2005 à 22:27
Au fait je vois que tu rentres à l'INSA de Lyon ;-)

Chapeau faut le faire, t'es un bon ;-)
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
26 juin 2005 à 22:22
oui c'est plus rapide ;-)
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
26 juin 2005 à 21:31
Arnauti >> Merci ;)

AnthoMicro >> Excellente idée ça raccourcirait le code et ça n'appelerait la fonction qu'une seule fois, mais c'est plus rapide ?
Merci pour la suggestion en tout cas, et j'en attend d'autre si vous en avez !
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
26 juin 2005 à 20:31
Je trouve que ce code est tres pratique, moi qui savait pas comment faire.

Merci,
A++
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
26 juin 2005 à 20:18
Salut,

tu peux remplacer tes multiples str_replace par des array :

function removescriptstr(&$str)
{
$str=str_replace(array('<script','</script>','<?','?>'),array('alt;script','</script>','<?','?>'),$str);
}

Ensuite t'appelles ta fonction comme ça par exemple :

<?php
function removescriptstr(&$str)
{
$str=str_replace(array('<script','</script>','<?','?>'),array('<script','</script>','<?','?>'),$str);
}
$var='<script>machin';
echo removescriptstr($var);
?>

a +
Rejoignez-nous