Index
Forums
Annuaire
Référencement
Télécharger
  phpBB SEO : Référencement Google, MSN, Yahoo, Annuaires, Forums  
phpBB SEO
Boards
Directory  
SEO  
Downloads
 
  Rechercher Search
    S'enregistrer
Pseudo :  Passe :  Auto  
Register  
 
   
Dem. d'aide : intégrer <? php dans BBCODE en toute securi

 
Poster un nouveau sujet   Répondre au sujet    phpBB SEO » Forum Référencement  » Le Forum phpBB3
::  
Auteur Message
Conchise
PR0
PR0


Inscrit le: 09 Jan 2008
Messages: 56

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Dim Jan 27, 2008 12:17 pm    Sujet du message: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Voilà, j'espere avoir trouvé un bon compromis pour le titre (Humainement compréhensible, une fois filtré il donne une url avec les bons mots clefs)

Autrement, voici mon problème :

Je suis en train de développer un mod d'affichage de formules mathématiques. Mais pour qu'il fonctionne, j'ai besoin d'executer une fonction php sur le texte entré. J'ai pensé à utiliser le bbcode :

Code:
[formule]{TEXT}[/formule]


est remplacer par :
Code:

<?php
   echo BuildFormula("{TEXT}");
?>

La fonction BuildFormula("{TEXT}"); retourne un code HTML correspondant à la formule. Il est donc envoyé directement au client par echo.

Malheureusement, ça ne fonctionne pas. Le code n'est pas executé et il se retrouve tel quel dans le code source de la page HTML coté client.
Pour le client, rien ne s'affiche à la place de la formule.


Voici le résultat dans mon navigateur :

Code:
<div class="postbody">
<?php
include('../maths/FormulaBuilder.php') ;
echo BuildFormula("<m>S(f)(t)=a_{0}+sum{n=1}{+infty}{a_{n} cos(n omega t)+b_{n} sin(n omega t)}");
?>
</div>


De plus, le texte entré pour la formule a été completement filtré et dégradé...

texte original :

Code:
S(f)(t)=a_{0}+sum{n=1}{+infty}{a_{n} cos(n omega t)+b_{n} sin(n omega t)}


Donc au final :

1. J'aimerais intégrer des balises bbcode dans l'éditeur, pour délimiter un texte. Exemple : [maths][/maths]

2. Faire en sorte que ce code, uniquement ce code, soit filtré par moi plutot que par phpbb, avant son insertion dans la bdd.
-> pour ne pas me prendre la tête, j'aimerais encoder base64 le texte entre [maths][/maths]. Exitdonc les possibilités d'injection SQL.

3. Lors de la composition de la page, j'aimerais récupérer le texte entre [maths][/maths], le décoder, le passer à ma fonction de génération de formules, apres l'avoir encore filtré des eventuelles balises HTML indésirables. (scriptes par ex)

Ce que je sais faire :

* Entrer le BBCODE dans l'éditeur
* Réaliser les filtres d'encodage/décodage/epuration HTML

Ce que je ne sais pas faire :

* Trouver l'endroit de phpbb où je dois insérer ma fonction de detection des balises [maths][/maths] et d'encodage lorsque l'utilisateur poste son message. Je ne sais pas comment la placer non plus. Il doit sans doute y avoir plus d'une ligne à modifier.

* Trouver l'endroit où je dois placer ma fonction de décodage/rendu de formule/filtrage avant que le post à afficher ne soit envoyé au navigateur.

Est-ce que quelqu'un sait comment faire ?
Revenir en haut de page
Conchise
PR0
PR0


Inscrit le: 09 Jan 2008
Messages: 56

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Dim Jan 27, 2008 4:22 pm    Sujet du message: Re: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Bon, j'ai déjà fait quelques progrès depuis toute à l'heure :

J'ai terminé la fonction qui detecte les balises puis les codes avant que le message n'entre dans la bdd. Je l'ai introduite au bon endroit.

J'ai effectué quelques posts : tout fonctionne. Je vois mes balises et le texte encodé en base 64 au milieu lors de l'affichage du topic.

Maintenant, il reste à trouver où je dois mettre la partie décodage/génération de formule. Le décodage/génération doit intervenir juste avant l'envoi des données au navigateur, parce qu'il va produire un code HTML qui ne doit pas être filtré par phpbb.


Et si tout marche, il faudra également que je décode le texte de formule dans les zones d'édition. Je suis donc a la recherche d'une troisieme location pour insérer ce code.



J'ai regardé dans le fichier viewtopic.php et j'ai vu plusieurs copmmentaires de phpbb seo. Peut-être que le concepteur du mod peut m'aider à trouver mon bonheur ? svp ?
Revenir en haut de page
Conchise
PR0
PR0


Inscrit le: 09 Jan 2008
Messages: 56

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Dim Jan 27, 2008 4:55 pm    Sujet du message: Re: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Problème réglé. Désolé pour le dérangement.
Est-ce qu'un admin peut effacer le sujet svp ?
Revenir en haut de page
dcz
Administrateur - Site Admin
Administrateur - Site Admin


Inscrit le: 28 Avr 2006
Messages: 14854

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Ven Fév 01, 2008 9:16 am    Sujet du message: Re: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Bah non, enfin pourquoi ?
C'est intéressant comme truc ce que tu as fait. Ça pourrait se partager Wink

++

_________________
Useful links :
SEO Forum || SEO Directory || SEO phpBB || SEO phpBB3 || Search
____________________

Liens Utiles :
Forum référencement || Annuaire référencement || Référencement phpBB || Référencement phpBB3 || Recherche
Revenir en haut de page
Visiter le site web de l'utilisateur
Conchise
PR0
PR0


Inscrit le: 09 Jan 2008
Messages: 56

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Ven Fév 01, 2008 11:24 am    Sujet du message: Re: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Ok. J'avais juste l'impression d'avoir dérangé pour rien...

Le problème me semblais difficile a résoudre, alors j'ai posté ici et sur un autre forum.
Mais comme c'était plutôt compliqué, je ne m'attendais pas à avoir trop de réponses. Alors je me suis tout de suite mis à chercher... et j'ai fini par trouver , mais beaucoup plus rapidement que ce que je m'imaginais. Donc problème réglé. Et tant qu'à faire, si je peux éviter de polluer le forum avec des idées folles... c'est mieux.

Mais s'il y a des personnes intéressées, oui, il faut garder le sujet. D'autant que la solution est intéressante (enfin, c'est mon avis)

Voilà comment j'ai fait :

1. Après le POST Etre le premier à récupérer le message posté et encoder base64 la formule mathématique.
2. Avant envoi au navigateur : Etre le dernier à modifier le message et décoder la formule (puis la traiter) avant envoi au navigateur.
3. Pour l'edition du post : Même chose qu'en 2.

J'ai eu l'idée de la protection/deprotection parce que je suis chimiste. Il y a certainement d'autres solutions, peut-être même meilleures. Mais celle là a l'avantage d'être tres courte.

Le plus dur ca a été le point 1. Il ne suffit pas de lire le code. Phpbb semble sortir des variables de sa poche. Sérieusement. Regardez le fichier posting.php.
Il ne suffit pas non plus de mettre son code en premier sur la page et de modifier $_POST['message'] : phpbb est bien protégé.

Si $_POST['message'] contient effectivement le message, toute modification est sans effet. phpbb récupère le post... ailleurs. Et lorsque le message apparait dans posting.php il est déjà en partie traité, filtré.

Et puis, en lisant le code ligne par ligne, fichiers par fichiers, je suis tombé sur functions.php. Très loin de de posting.php donc.
Là on est dans le lot de fonctions commune à toutes le pages.

Deux fonctions on retenu mon attention. Je les avais déjà remarquées avant, mais j'avais pas du tout envie d'y toucher.

Il s'agit de set_var et request_var. En fait, phpbb semble demander toutes les variables issues de formulaires à request_var.
Et request_var fait un set_var sur les-dites variables. Et dans set_var, la ligne qui tue :

Code:
$result = trim(htmlspecialchars(str_replace(array("\r\n", "\r"), array("\n", "\n"), $result), ENT_COMPAT, 'UTF-8'));


Sur toutes les variables de type string.

J'ai donc modifié request_var de sorte à effectuer mon traîtement avant l'appel de set_var. Conséquence : ma formule est protégée. Le reste du texte est quand même filtré. (Traitement à effectuer dans le dernier else de la fonction)

Dernier point :

Pour la protection/deprotection, piece of cake, j'utilise les expressions régulières avec un callback, ca tient en une ligne :

Code:
$varatraiter = preg_replace_callback("((\[balise\])(.*)(\[/balise\]))",create_function('$reg', 'return "[balisemodifiee]".base64_encode($reg[2])."[/balisemodifiee]";'),$varatraiter);


Au final, il aura suffit de trois lignes bien placées. Mais attention, ce code est dangereux. Un utilisateur mal intentionné pourrait entrer du code htlm entre les balises et le faire executer sur le navigateur client. (popup de pubs, iframe,...)

Cependant, dans tous les cas on reste protégé contre l'injection SQL car le texte non filtré par phpbb est encodé base 64 et contre l'execution de code php car le message n'est pas executé.

Sur l'autre forum, ils voulaient autoriser le html dans des messages à l'aide de balises type bbcode. Ce Mod permet ca donc j'ai réalisé un tutoriel. Si quelqu'un est intéressé, je peux lui filer le lien.

voilà.
++
Revenir en haut de page
dcz
Administrateur - Site Admin
Administrateur - Site Admin


Inscrit le: 28 Avr 2006
Messages: 14854

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Mer Fév 06, 2008 9:38 am    Sujet du message: Re: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Ok, donc, c'est pas la solution la plus élégante, mais effectivement, tu peux passer par request_var, c'est juste que ton code va être utilisé pour toutes les récupération de variables.

Un meilleur endroit serait certainement dans posting.php, le message du post est récupéré à cet endroit :


Code:
   $message_parser->message      = utf8_normalize_nfc(request_var('message', '', true));


Tu pourrais traiter le message à cet endroit, ou alors, ajouter un bbcode, mais en dur, pas depuis l'acp. En le traitant à cet endroit, ce sera pas vraiment un bbcode, car les formules seront parsée un fois pour toute.
Ajouter un bbcode en dur n'est pas hyper compliqué, mais il y a ps mal de chose à ne pas oublier, tu pourrais t'inspirer d'un mod qui en ajoute un.

++

_________________
Useful links :
SEO Forum || SEO Directory || SEO phpBB || SEO phpBB3 || Search
____________________

Liens Utiles :
Forum référencement || Annuaire référencement || Référencement phpBB || Référencement phpBB3 || Recherche
Revenir en haut de page
Visiter le site web de l'utilisateur
Conchise
PR0
PR0


Inscrit le: 09 Jan 2008
Messages: 56

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Mer Fév 06, 2008 10:46 am    Sujet du message: Re: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Dans posting.php, j'ai la très nette impression que cette linge n'intervient que pour l'édition d'un message déjà existant. J'ai fait plein de petits tests de ce style :

Code:
$message_parser->message = "Hello"


pour trouver les bons emplacements. Et dans le cas présenté, hello n'apparaît que dans la zone d'édition. C'est pour ça que je disais que phpbb semblait sortir les variables de sa poche.

Et j'ai fini par sélectionner le dernier segment de request_var, dernier else, tout en bas, pour optimiser le code, et avec une condition sur la variable demandée, pour ne traiter que les messages.

Voici la fonction request_var modifiée :

Code:
function request_var($var_name, $default, $multibyte = false, $cookie = false)
{
   if (!$cookie && isset($_COOKIE[$var_name]))
   {
      if (!isset($_GET[$var_name]) && !isset($_POST[$var_name]))
      {
         return (is_array($default)) ? array() : $default;
      }
      $_REQUEST[$var_name] = isset($_POST[$var_name]) ? $_POST[$var_name] : $_GET[$var_name];
   }

   if (!isset($_REQUEST[$var_name]) || (is_array($_REQUEST[$var_name]) && !is_array($default)) || (is_array($default) && !is_array($_REQUEST[$var_name])))
   {
      return (is_array($default)) ? array() : $default;
   }

   $var = $_REQUEST[$var_name];
   if (!is_array($default))
   {
      $type = gettype($default);
   }
   else
   {
      list($key_type, $type) = each($default);
      $type = gettype($type);
      $key_type = gettype($key_type);
      if ($type == 'array')
      {
         reset($default);
         $default = current($default);
         list($sub_key_type, $sub_type) = each($default);
         $sub_type = gettype($sub_type);
         $sub_type = ($sub_type == 'array') ? 'NULL' : $sub_type;
         $sub_key_type = gettype($sub_key_type);
      }
   }

   if (is_array($var))
   {
      $_var = $var;
      $var = array();

      foreach ($_var as $k => $v)
      {
         set_var($k, $k, $key_type);
         if ($type == 'array' && is_array($v))
         {
            foreach ($v as $_k => $_v)
            {
               if (is_array($_v))
               {
                  $_v = null;
               }
               set_var($_k, $_k, $sub_key_type);
               set_var($var[$k][$_k], $_v, $sub_type, $multibyte);
            }
         }
         else
         {
            if ($type == 'array' || is_array($v))
            {
               $v = null;
            }
            set_var($var[$k], $v, $type, $multibyte);
         }
      }
   }
   else
   {
      // BEGIN MOD Protect_Html www.forum.pythagora.fr
      // More information at www.forum.pythagora.fr/inserer-code-html-dans-message-post-phpbb3-t16.html
      if ($var_name == 'message')
      {
            $var = preg_replace_callback("(([html])(.*)([/html]))", create_function('$reg', 'return "[codebase64]".base64_encode($reg[2])."[/codebase64]";'),$var);}
      // END MOD Protect_Html
         set_var($var, $var, $type, $multibyte);
   }

   return $var;
}


Mais par contre, j'ai un autre problème qui m'embête beaucoup :

Mon expression régulière est de la forme (([html])(.*)([/html])) Mais elle ne sélectionne que du texte sur une seule ligne. C'est à dire que si mon code HTML est réparti sur plusieurs lignes, ca ne marche pas, ou enfin, pas toujours... Je ne sais pas bien pourquoi.

Une fois encodé, le texte tient sur une seule ligne. Et là, j'ai eu des collisions de balises, alors j'ai du modifier le décodage pour ne prendre en compte que les cractères d'encodage base 64. (autrement, en cas de balises multiples, la toute première et la toute dernière étaient prises en compte)

Donc, j'aimerais pouvoir entrer du HTML sur plusieurs lignes, et plusieurs balises de ce type par message.... Si quelqu'un a une idée...
Revenir en haut de page
dcz
Administrateur - Site Admin
Administrateur - Site Admin


Inscrit le: 28 Avr 2006
Messages: 14854

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Mer Fév 06, 2008 10:08 pm    Sujet du message: Re: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Pour les multilignes, c'est ton expression régulière :

Code:
$var = preg_replace_callback("(([html])(.*)([/html]))", create_function('$reg', 'return "[codebase64]".base64_encode($reg[2])."[/codebase64]";'),$var);


Utilises plutôt :

Code:
$var = preg_replace_callback("`\[html\](.*)\[/html\]`Uis", create_function('$reg', 'return "[codebase64]".base64_encode($reg[1])."[/codebase64]";'),$var);


Il vaut mieux utiliser un caractère bien spécial pour délimiter le masque, les parenthèse, c'est pas top du tout vu qu'elle sont utile à d'autres choses.

Pas la peine de capturer les balises avec ta fonction de callback, il faut échapper les [ et ] qui ont aussi une signification (classe de caractère [a-z]). Pour les options, i, c'est pour ne pas dépendre de la casse, le s, c'est pour que le "." du masque puisse contenir plus d'une ligne de texte (l'option que tu cherchais) et U, c'est ungreedy, c'est pour que l'expression en consomme pas tout le texte en cas d'utilisation multiple du bbcode, si non :

Code:
[html]du html [/html] du texte [html]encore du html[/html]


se verrait transformé en :
Code:
[codebase64]base64_encode(du html [/html] du texte [html]encore du html)[/codebase64]


T'es sur que ça marche pas pour les nouveaux messages à cet endroit ?
Il faudra que je regarde ça de plus prêt.

Pour le côté sorti de sa poche du message dans le code de phpbb, ça doit être une histoire de variable passés par référence dans une fonction de traitement. Mais y'a forcément un appel à request_var associé quelque part, faut le trouver Wink

Je continu de penser que la façon la plus propre de faire serait de s'inspirer d'un mod qui ajoute un bbcode pour ajouter le tiens de la même façon directement.

++

_________________
Useful links :
SEO Forum || SEO Directory || SEO phpBB || SEO phpBB3 || Search
____________________

Liens Utiles :
Forum référencement || Annuaire référencement || Référencement phpBB || Référencement phpBB3 || Recherche
Revenir en haut de page
Visiter le site web de l'utilisateur
Conchise
PR0
PR0


Inscrit le: 09 Jan 2008
Messages: 56

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Ven Fév 08, 2008 11:12 am    Sujet du message: Re: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Excuse-moi, je t'ai dit une bêtise, je sais pourquoi j'ai écarté posting.php.

Il y a bien un request_var quelque part qui contient le message quelque part. Mais je me souviens que sur les tests que j'ai fait, le message était déjà traité à cet endroit par des filtres.

Puis j'ai tourné en rond, et puis j'ai fini par aller dans functions.php examiner le code de request_var.

Il faut aller dans requert_var.

Parce que request_var filtre déjà le message. Donc dans posting.php, c'est trop tard.
Ou alors, il faudrait modifier posting.php pour qu'il n'appelle pas request_var et lui donner le message moi même, apres l'avoir traité. Est-ce sage ? Request_var est bien longue comme fonction, je ne comprends pas tout ce qu'elle fait. N'est-ce pas plus sage, niveau sécurité, de laisser request_var faire ce qu'elle fait ?

Je ne sais pas... Il faudra que j'y vienne, parce que j'aimerais sécuriser le mod en n'autorisant ces balises que si l'utilisateur a un certain rôle. et dans request-var, je n'ai pas accès à $auth->acl_get('a_').

Citation:
Je continu de penser que la façon la plus propre de faire serait de s'inspirer d'un mod qui ajoute un bbcode pour ajouter le tiens de la même façon directement.


Oui, mais avant la transformation du bbcode, le message a déjà été en partie filtré. J'ai essayé d'aller dans parse message. Des le début, mais tout ce que j'ai pu récupérer du message était useless.
Revenir en haut de page
jorro



Inscrit le: 20 Fév 2008
Messages: 2

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Mer Fév 20, 2008 11:59 am    Sujet du message: Utiliser les formules

Sujet qui m'intéresse au plus haut point.

Actuellement j'ai la possibilité de rentrer des formules mathématiques sur mon site http://jorror.free.fr/phpbb3 de deux façons mais il me manque les balises a insérer dans le bbcode.

-> Comment faire pour rajouter la possibilité de balises [pretty] [/pretty] et de même [tex] [/tex] (pour le LaTeX)
Il me faut juste les balises car pour le reste j'ai trois fichiers modifiés et cela me convient.

Pour essayer n'oublier pas de taper les balises et pour l'utilisation de [pretty] [/pretty] ( ce qui donne de très beaux résultats) penser à aller voir la syntaxe chez le créateur http://prettyprint.free.fr

Merci
Revenir en haut de page
SeO
Administrateur - Site Admin
Administrateur - Site Admin


Inscrit le: 15 Mar 2006
Messages: 3482

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Jeu Fév 21, 2008 11:01 am    Sujet du message: Re: Dem. d'aide : intégrer <? php dans BBCODE en toute securi

Conchise a écrit:
N'est-ce pas plus sage, niveau sécurité, de laisser request_var faire ce qu'elle fait ?


Si bien sûr.

En fait, dans le cas d'une chaîne de caractères, request_var la passe par htmlspecialchars(), il se peut qu'un petit coup de htmlspecialchars_decode (fonction de phpBB3) te permette de ne pas toucher request_var.

@jorro, tu peux pas tout simplement les ajouter dans l'acp ? ou dans la liste des bbcode en dur ?

_________________
phpBB SEO || SEO Forum || Forum Référencement
GYM Sitemap & RSS for phpBB3 has been released ! || GYM Sitemap & RSS for phpBB3 est disponible !
Revenir en haut de page
jorro



Inscrit le: 20 Fév 2008
Messages: 2

Dem. d'aide : intégrer <? php dans BBCODE en toute securiPosté le: Ven Fév 22, 2008 9:52 pm    Sujet du message: c'est OK

Effectivement par l'ACP c'est vite fait bien fait.
Merci

Si vous voulez tester forum maths.

Bonsoir et merci.
Revenir en haut de page
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    phpBB SEO » Forum Référencement  » Le Forum phpBB3
Page 1 sur 1

Navigation Autres sujets de discussion

Sauter vers: