Insérer du code HTML dans un message/post phpbb3

Ici on discute des mods pour améliorer phpbb3 et augmenter encore la sécurité.

Insérer du code HTML dans un message/post phpbb3

Messagede Eskadi le Lun 28 Jan 2008 17:17

Présentation et Installation du Mod Protect Html version 1.0
Dernière mise à jour : 02 Février 2008 14h10

Sommaire :

1. Avant Propos
2. Considérations générales sur la sécurité dans PhpBB 3.0.0
3. Fonctionnement du MOD
4 Comment utiliser le MOD
5. Installation du MOD
6. Améliorations à venir
7. Remarques au sujet de la sécurité du mod
8. Licence et téléchargement du MOD
9. Vos remarques sur le MOD

1. Avant Propos :

Ce MOD très simple permet d'insérer du code HTML dans un message sans qu'il soit filtré par phpbb. Le code sera ensuite interpreté par le navigateur client lors de l'affichage du message.

Ce mod permet donc d'insérer des vidéos dailymotion, de tracer des tableaux, d'ajouter des jeux javascript, des formulaires, etc... Bref, tout un tas de choses impossibles dans un forum phpbb classique.
Avatar de l’utilisateur
Eskadi
Administrateur du site
 
Messages: 44
Inscription: Sam 26 Jan 2008 11:00

Re: Insérer du code HTML dans un message/post phpbb3

Messagede Eskadi le Lun 28 Jan 2008 17:18

2. Considérations générales sur la sécurité dans PhpBB 3.0.0

Comme beaucoup d'applications PHP qui permettent à un utilisateur tiers d'envoyer et d'afficher du texte sur un site, PhpBB 3 est protégé contre l'injection de code. Il s'agit d'une technique de piratage qui consiste à entrer un code malicieux bien construit dans un formulaire.

Lorsque le formulaire est traité par le serveur ou que le message par le navigateur client, le code entre en action et produit son effet. Les conséquences sont variées et peuvent aller très loin, jusqu'à la destruction complète du site.

Pour se protéger, plusieurs fonctions de phpbb3 analysent et filtrent le contenu des messages afin de désactiver toutes les balises html, javascript, php, etc... et de prévenir tout risque d'injection SQL. En conséquence, le message est sécurisé mais le code html entré a été transformé et n'est plus interpretable par le navigateur. Donc, par défaut, l'insertion de code HTML dans un post n'est pas possible.
Avatar de l’utilisateur
Eskadi
Administrateur du site
 
Messages: 44
Inscription: Sam 26 Jan 2008 11:00

Re: Insérer du code HTML dans un message/post phpbb3

Messagede Eskadi le Lun 28 Jan 2008 17:21

3. Fonctionnement du MOD

Il est bien entendu hors de question de désactiver les filtres de phpbb. Votre forum ne ferait pas long feu dans ces condition.

On va donc créer deux balises bbcode : [html] et [/html] et se débrouiller pour que le texte saisi entre ces balises ne soit pas filtré par phpbb. Ensuite, avant envoi du texte au navigateur client, on retire les balises [html] et [/html].
Pour ne pas prendre trop de risque, il faudrait se prévenir des risques d'injection SQL et de code php. Un filtre alourdirait le code.
On va donc prendre une solution simple, courte et élégante : L'encodage base 64.
On fait d'une pierre trois coups : Le code html est protégé des filtres, on se protège de l'injection SQL et le code php est extrèmement court : Il suffit d'ajouter trois lignes de code réparties dans trois fichiers pour effectuer tout le travail.

Il faut donc réaliser les trois opérations suivantes :

1. Protection du code : [html]{TEXTE}[/html] est transformé en [codebase64]{TEXTE ENCODÉ}[/codebase64]
2. Déprotection juste avant envoi au navigateur client et retrait des balises [html][/html]
3. Déprotection pour l'édition du message, en conservant les balises [html][/html]

On utilise les expressions régulières avec callback et la fonction d'encodage base 64 de PHP.


4. Comment utiliser le MOD

Pour utiliser le MOD, il suffit donc d'insérer dans un message :
Code: Tout sélectionner
[html] Le code html à protéger [/html]


Le code html à protéger doit être entré sur une seule ligne. C'est important. Autrement, les balises ne seront pas prises en compte. Si le code est complexe, il est préférable de le taper dans un éditeur de texte (notepad, kwrite, gedit, etc ...) puis de passer l'ensemble du code sur une seule ligne avant de le coller dans phpbb.
Si le code est très long (plus de 1024 caractères) il est également possible de le fractionner sur plusieurs lignes en cumulant les balises :

Code: Tout sélectionner
[html]Ligne 1 de code html[/html]
[html]Ligne 2 de code html[/html]
[html]Ligne 3 de code html[/html]
[html]Ligne 4 de code html[/html]


Ainsi des codes complexes peuvent être découpés. Ci dessous, un exemple d'affichage utilisant du code HTML réparti sur trois lignes. Au final on ne voit qu'un seul tableau car les balises [html][/html] ne sont pas envoyés au navigateur :

Tutoriel pour insérer une formule de maths dans un post du forum pythagora phpbb3

Regardez quand même la rubrique sécurité pour savoir comment vous protéger très simplement.
Avatar de l’utilisateur
Eskadi
Administrateur du site
 
Messages: 44
Inscription: Sam 26 Jan 2008 11:00

Re: Insérer du code HTML dans un message/post phpbb3

Messagede Eskadi le Lun 28 Jan 2008 17:35

5. Installation du MOD

L'installation est simple, mais avant tout, sauvegardez vos fichiers originaux et votre bdd.

Niveau : Débutant
Durée : 3 minutes
Nombre de fichiers à éditer : 3 fichiers
Nombre de fichiers à ajouter : 1 fichier.



Ouvrir le fichier : /include/functions.php

Trouver la fonction request_var :
Code: Tout sélectionner
function request_var($var_name, $default, $multibyte = false, $cookie = false)

En fin de fonction, trouver :
Code: Tout sélectionner
   else
   {
      set_var($var, $var, $type, $multibyte);
   }
   return $var;
}

Modifier pour obtenir :
Code: Tout sélectionner
   else
   {
      // BEGIN MOD Protect_Html www.forum.pythagora.fr
      if ($var_name == 'message') {$var = preg_replace_callback("`\[html\](.*)\[/html\]`Uis", create_function('$reg', 'return "[codebase64]".base64_encode($reg[1])."[/codebase64]";'), $var);}
      // END MOD Protect_Html www.forum.pythagora.fr
      set_var($var, $var, $type, $multibyte);
   }
   return $var;
}

Note : Ce mod de pythagora.fr va améliorer votre forum en vous offrant toute la liberté du html dans vos messages. En échange, nous vous demandons de bien vouloir ajouter un tout petit lien vers pythagora juste après le copyright de phpbb. Ce code affichera une toute petite image, comme celle que vous pouvez voir en bas de cette page.

Toujours dans functions.php, cherchez la fonction page_footer :

Juste avant :
Code: Tout sélectionner
// Output page creation time
if (defined('DEBUG'))
{
   $mtime = explode(' ', microtime());
   $totaltime = $mtime[0] + $mtime[1] - $starttime;


Insérez :
Code: Tout sélectionner
$add = '<div style="padding-top:5px; text-align: middle"><a href="http://www.forum.pythagora.fr/" title="' . ( strpos($config['default_lang'], 'fr') !== false  ?  'Entraide Scolaire et Mods pour optimiser PhpBB3' : 'Mods to Enhance Phpbb3 ') . '"><img src="../images/pythagora-fr.png" alt="www.pythagora.fr"/></a></div>'; $user->lang['TRANSLATION_INFO'] .= $add;


Si vous ne voulez pas de l'image, mais juste un lien vers pythagora, remplacez le code précédent par :
Code: Tout sélectionner
$add = '<div style="padding-top:5px; text-align: middle"><a href="http://www.forum.pythagora.fr/" title="' . ( strpos($config['default_lang'], 'fr') !== false  ?  'Entraide Scolaire et Mod pour optimiser PhpBB3' : 'Mod to Enhance Phpbb3 ') . '">Pythagora.fr : Mods pour phpBB3</a></div>'; $user->lang['TRANSLATION_INFO'] .= $add;



Uploadez l'image pythagora-fr.png dans le dossier /images de phpbb.


Ouvrir le fichier : /posting.php
Trouver :
Code: Tout sélectionner
// Decode text for message display
$post_data['bbcode_uid'] = ($mode == 'quote' && !$preview && !$refresh && !sizeof($error)) ? $post_data['bbcode_uid'] : $message_parser->bbcode_uid;
$message_parser->decode_message($post_data['bbcode_uid']);

Après, Ajouter :
Code: Tout sélectionner
// BEGIN MOD Protect_Html www.forum.pythagora.fr
$message_parser->message = preg_replace_callback("`\[codebase64\]([[:alnum:]/+=]*)\[/codebase64\]`Uis", create_function('$reg', 'return "[html]".base64_decode($reg[1])."[/html]";'), $message_parser->message);
// END MOD Protect_Html www.forum.pythagora.fr


Ouvrir le fichier : /viewtopic.php
Trouver :
Code: Tout sélectionner
// Highlight active words (primarily for search)
if ($highlight_match)
{
   $message = preg_replace('#(?!<.*)(?<!w)(' . $highlight_match . ')(?!w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">1</span>', $message);
   $row['post_subject'] = preg_replace('#(?!<.*)(?<!w)(' . $highlight_match . ')(?!w|[^<>]*(?:</s(?:cript|tyle))?>)#is', '<span class="posthilit">1</span>', $row['post_subject']);
}

Après, Ajouter :
Code: Tout sélectionner
// BEGIN MOD Protect_Html www.forum.pythagora.fr
$message = preg_replace_callback("`\[codebase64\]([[:alnum:]/+=]*)\[/codebase64\]`Uis", create_function('$reg', 'return base64_decode($reg[1]);'), $message);
// END MOD Protect_Html www.forum.pythagora.fr


Envoyer les fichiers sur les serveurs. Effet immédiat. Pensez quand même à consulter la rubrique sécurité en fin de post.
Avatar de l’utilisateur
Eskadi
Administrateur du site
 
Messages: 44
Inscription: Sam 26 Jan 2008 11:00

Re: Insérer du code HTML dans un message/post phpbb3

Messagede Eskadi le Lun 28 Jan 2008 17:52

6. Améliorations à venir

Pour l'instant, ce MOD ne supporte pas le Full preview. C'est à dire que la fonction apreçu (preview) de phpbb montrera [codebase64]{TEXTE ENCODÉ}[/codebase64] et non le résultat final. Ce n'est pas tellement dérangeant dans la mesure ou il suffit d'éditer le poste pour faire les corrections. Une évolution vers la prise en charge de la preview est à venir.

A venir également, un filtre de sélection des balises HTML autorisés et la possibilité d'insertion de scriptes php, dans des balises spécifiques.

Ce MOD ne supporte pas non plus la gestion de privilèges. Ce n'est pas un problème non plus. Pour bien le gérer, voir la rubrique sécurité. Ce n'est pas pour l'instant une priorité. Mais le developpement de cette fonctionnalité n'est pas exclu. Notamment pour l'insertion de code php.
Avatar de l’utilisateur
Eskadi
Administrateur du site
 
Messages: 44
Inscription: Sam 26 Jan 2008 11:00

Re: Insérer du code HTML dans un message/post phpbb3

Messagede Eskadi le Lun 28 Jan 2008 17:54

7. Remarques au sujet de la sécurité du MOD

Du point de vue sécurité, il n'est pas sage d'autoriser n'importe qui à poster en HTML sur votre site ou forum.
Le MOD Protect HTML de http://www.forum.pythagora.fr ne supporte pas pour le moment la gestion des droits utilisateurs. Donc pour restreindre l'usage du HTML dans les posts aux administrateurs ou modérateurs du forum il suffit de renommer les balises :

[html][/html] en autre choses, par exemple [motsecret][/motsecret] et de n'en informer que les personnes concernées. Un utilisteur normal ne peut pas deviner les balises à taper pour inserer du HTML.

Il est également bon de savoir que ce code est sécurisé contre l'injection sql puisque le texte fourni à la base de données est encodé. Le seul risque se situe du coté client. Un spammer pourrait par exemple insérer un javascript qui ouvre des fenetres de publicité avec les messages.

Si vous voulez permettre à vos utilisateurs enregistrés de poster en html, vous devriez filtrer le code avant de l'envoyer au navigateur et retirer les scripts et autres éléments dangeureux.

Le filtre devrait être inséré dans viewtopic.php, juste après le MOD, et modifier le contenu de la variable $message.
Avatar de l’utilisateur
Eskadi
Administrateur du site
 
Messages: 44
Inscription: Sam 26 Jan 2008 11:00

Re: Insérer du code HTML dans un message/post phpbb3

Messagede Eskadi le Lun 28 Jan 2008 17:57

8. Licence et téléchargement du MOD

Le MOD Protect_HTML peut être téléchargé sur [le serveur] et est livré sous une version adaptée de la Licence GNU v3.

Ci-dessous, la partie adaptée de la licence. Vous êtes invités à consulter la [version Originale] et la [traduction française].
Extrait de la Licence GNU V.3 et Copyright a écrit:Le MOD Protect_HTML de http://www.pythagora.fr permet l'insertion de code HTML dans un message sur les forums PHPBB 3.0.0.
Copyright (C) 2008 Eskadi — Tous droits réservés.

Ce MOD est un MOD libre ; vous pouvez le redistribuer ou le modifier suivant les termes de la “GNU General Public License” telle que publiée par la Free Software Foundation : soit la version 3 de cette licence.
Ce MOD est distribué dans l’espoir qu’il vous sera utile, mais SANS AUCUNE GARANTIE : sans même la garantie implicite de COMMERCIALISABILITÉ ni d’ADÉQUATION À UN OBJECTIF PARTICULIER. Consultez la Licence Générale Publique GNU v3 pour plus de détails.

Vous êtes libres d'utiliser ce MOD à des fins personnelles ou commerciales. Vous pouvez le distribuer en l'état ou le modifier. Cependant, si vous le distribuez, vous devez distribuer une version originale et non modifiée de ce mod avec ses commentaires, auteur, copyright, licence et liens vers pythagora. La distribution d'une version modifiée est soumise à l'acceptation de son auteur eskadi_NoSPAAM_pythagora.fr (remplacez _NoSPAAM_ par @)
Avatar de l’utilisateur
Eskadi
Administrateur du site
 
Messages: 44
Inscription: Sam 26 Jan 2008 11:00

Suivante

Retourner vers Les MODS pour améliorer phpbb3

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron