Tout semble très bien fonctionner comme ca, mais ca ne resout pas
completement mon probleme
les javascripts sont sucrés pas la sécurité (<script remplacés par
<script).
Ce que je ne comprend pas, c'est qu'en mettant un filtre
supprimer_la_securite, ben ca ne marche pas mieux.
Oui, c'est normal. (ça doit être la cinquantième fois que quelqu'un pose
cette question, il va falloir faire une FAQ)
La sécurité est appliquée après *tous* les filtres, même les filtres
utilisateurs appelés dans les squelettes.
La raison est simple : n'importe quel filtre, et en particulier les
filtres conçus par des webmestres peu expérimentés, peut contenir des
failles laissant les visiteurs exécuter du code PHP.
Exemple : prenons un filtre supprimant les commentaires HTML. Ainsi ce
filtre transforme un :
blabla <!-- commentaire --> blabla
en :
blabla blabla
Si SPIP n'appliquait pas sa sécurité *après* le filtre mais avant, un
rédacteur (dans un article) ou un visiteur (dans un forum) pourrait taper
:
<<!-- -->?php mysql_query("DELETE FROM spip_articles"); ?>
qui ne serait pas détecté par la sécurité de SPIP, mais serait transformé
à la fin en :
<?php mysql_query("DELETE FROM spip_articles"); ?>
Il est évident de voir que n'importe quel filtre de plus de trois lignes
contient des tas d'exploitations potentielles de ce genre. Bref, il est
*impératif* que la sécurité vienne toujours tout à la fin. Si tu penses
que tes filtres sont sûrs (hum hum), tu peux patcher SPIP pour changer son
fonctionnement, mais il ne faut évidemment pas que ce genre de choses soit
intégré à la distrib officielle.
Si tu veux contourner la sécurité pour les <script> javascript, il faut le
faire dans le squelette :
<?php echo anti_securite('[(#TEXTE|texte_script)]'); ?>
Ou alors déclarer la fonction javascript séparément (dans le squelette),
et l'appeler dans l'article par un truc du genre <p onLoad="..."> qui
évite de faire sauter le <script>.
a+
Antoine.