View previous topic :: View next topic |
Author |
Message |
laresistance2 Smarty Rookie
Joined: 29 Nov 2010 Posts: 23
|
Posted: Sat Dec 11, 2010 9:09 pm Post subject: Inclure strip_tags() ou htmlspecialchars à Smarty |
|
|
Bonjour,
Je voudrais si Smarty a une fonction similaire à htmlspecialchars ou encore mieux à strip_tags()
afin de sécuriser les pages, formulaires...
Ou bien comment puis-je faire pour que les balises HTML soient supprime ou transformé en entités quand il est assigné à Smarty
Merci d'avance
Last edited by laresistance2 on Thu Dec 16, 2010 8:56 pm; edited 4 times in total |
|
Back to top |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
|
Back to top |
|
laresistance2 Smarty Rookie
Joined: 29 Nov 2010 Posts: 23
|
Posted: Sun Dec 12, 2010 12:43 am Post subject: |
|
|
Merci,
J'ai aussi trouvé http://www.smarty.net/docsv2/fr/language.modifier.strip.tags pour strip.tags
Mais il n'est pas possible de l'activer par défaut pour que toutes les variables {$jesuisunevariable} soient transformés en entités au lieu de faire {$jesuisunevariable|escape} ? |
|
Back to top |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
|
Back to top |
|
laresistance2 Smarty Rookie
Joined: 29 Nov 2010 Posts: 23
|
Posted: Sun Dec 12, 2010 3:06 pm Post subject: |
|
|
Merci,
Mais vous pouvez juste me montrer un exemple pour que je comprenne
J'ai fait quelque chose comme ça mais il ne fonctionne pas
Code: |
<?php
require('../libs/Smarty.class.php');
$smarty = new Smarty;
$smarty->default_modifierss = array('strip_tags');
$test = ' <script type="text/javascript">
alert('Faille de sécurité');
</script>';
$smarty->assign('test', $test);
$smarty->display('test.tpl');
?>
|
|
|
Back to top |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Sun Dec 12, 2010 9:20 pm Post subject: |
|
|
A oui effectivement, je viens de regarder la source du compiler et il n'effectue que le default_modifer sur les variables générées par smarty (comme dans les section, foreach, etc..., voir fonction "_compile_smarty_ref" ligne 1990 du fichier "Smarty_Compiler.class.php")
Pour palier alors à cela, le plus simple serait de redéfinir une fonction d'assignation des variables smarty :
Code: |
<?php
// on etend smarty pour avoir les mêmes fonctionnalités
class SmartyExtend extends smarty{
public function assign($name, $value = ''){
if(!is_array($value) && !is_object($value)){
$value = $this->escapeString($value);
}
parent::assign($name, $value);
}
private function escapeString($value){
return htmlspecialchars($value);
}
}
?>
|
Puis du coup utiliser cette classe a la place de la classe smarty standard (je te conseillerai de laisser le default_modifiers afin qu'il s'occupe des tableaux)
Code: |
require('../libs/SmartyExtend.php');
$smarty = new SmartyExtend();
$smarty->default_modifiers = array('escape:"htmlall"');
$test = ' <script type="text/javascript">
alert('Faille de sécurité');
</script>';
$smarty->assign('test', $test);
$smarty->display('test.tpl');
|
++ _________________ N'oubliez pas de mettre le tag "[Résolu]" sur vos post |
|
Back to top |
|
laresistance2 Smarty Rookie
Joined: 29 Nov 2010 Posts: 23
|
Posted: Wed Dec 15, 2010 10:35 pm Post subject: |
|
|
Merci
Comme tu le montre sur ton exemple tu crée un nouveau fichier nomé "SmartyExtend.php" dans le répertoire /libs/
Alors je dois appeler les deux classes
Code: | <?php
require('../libs/SmartyExtend.php');
require('../libs/Smarty.class.php');
|
C'est bien ça ?
Encore merci beaucoup |
|
Back to top |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Thu Dec 16, 2010 12:11 pm Post subject: |
|
|
Non j'ai directement fait l'include de smarty dans ce fichier (je ne l'ai pas copier coller car je l'avais rajouter après :p ) pour eviter de le faire a chaque fois _________________ N'oubliez pas de mettre le tag "[Résolu]" sur vos post |
|
Back to top |
|
laresistance2 Smarty Rookie
Joined: 29 Nov 2010 Posts: 23
|
Posted: Thu Dec 16, 2010 8:15 pm Post subject: |
|
|
Ok,
Merci
C'est vrai que c'est mieux de faire l'include de Smarty.class.php dans SmartyExtend.php que de rajouter simplement le code dans la class Smarty.class.php pour éviter de faire à chaque fois la même manipulation après la mise à jour de Smarty |
|
Back to top |
|
laresistance2 Smarty Rookie
Joined: 29 Nov 2010 Posts: 23
|
Posted: Thu Dec 16, 2010 8:58 pm Post subject: |
|
|
Juste encore une dernière question
Peutx-tu me montrer comment le faire avec strip_tags
J'ai essayé mais il ne fonctionne pas |
|
Back to top |
|
Gowser Smarty Pro
Joined: 19 Feb 2008 Posts: 104 Location: Nantes (France)
|
Posted: Fri Dec 17, 2010 6:23 pm Post subject: |
|
|
Tu n'as juste qu'à modifier le "htmlspecialchars" par le "strip_tag" :
Code: |
<?php
require 'C:/wamp/www/gwmarket/lib/smarty/Smarty.class.php';
// on etend smarty pour avoir les mêmes fonctionnalités
class SmartyExtend extends smarty{
public function assign($name, $value = ''){
if(!is_array($value) && !is_object($value)){
$value = $this->escapeString($value);
}
parent::assign($name, $value);
}
private function escapeString($value){
return strip_tags($value);
}
}
|
++ _________________ N'oubliez pas de mettre le tag "[Résolu]" sur vos post |
|
Back to top |
|
laresistance2 Smarty Rookie
Joined: 29 Nov 2010 Posts: 23
|
Posted: Wed Feb 09, 2011 5:54 am Post subject: |
|
|
Re:
Désolé pour ce gros retard
Je voulais juste vous dire que j'obtiens cette erreur
Code: | Strict Standards: Declaration of SmartyExtend::assign() should be compatible with that of Smarty_Internal_Data::assign() in /var/www/monsite/lib/Smarty/SmartyExtend.class.php on line 4 |
P.S. j'ai la version 3.0.6 |
|
Back to top |
|
|