Plugin PluXML : Empêcher pluXML de virer les backslashes des articles
Ze problaim
Si tu publies des bouts de code sur pluXML, tu as sans doute remarqué que ce dernier est pour le moins psychorigide avec les antislashes: il les vire sans ménagement... pourtant, on aimerait bien qu'il conserve les regex en l'état dans un code par exemple.
Je suis pas stupide, je comprends bien qu'il s'agit là d'un souci de sécurité, mais quand même, ça fait ch***.
Le souci,c'est que pluXML filtre les antislashes dans les $_POST
très très tôt dans le code, bien avant tout hook de plugin: il le fait dans le prepend.php de l'admin, ligne 43.
Ben mon con, comment tu vas faire si tu peux pas intervenir en php via un hook pour modifier le $_POST
?
Ze solouchonne
Ben tu le modifies en JS dans la page article lors du submit du formulaire
En gros, on remplace les «\» par des «\» dans le chapo et le avant de submit le formulaire. C'est une méthode dont j'ai trouvé l'idée ici https://forum.pluxml.org/discussion/6960/plugin-plx-cssbackslash-pour-ledition-des-fichiers-css
Donc, j'injecte un petit script JS via le hook
Code du script injecté
(function (){
let chapo = document.getElementById("id_chapo");
var content = document.getElementById("id_content");
var form = document.getElementById("form_article");
function saveSlashes(str){
return str.replace(/[\\]/g, '\\$&');
}
form.addEventListener('formdata',function(e){
let formData = e.formData;
formData.set('chapo', saveSlashes(formData.get('chapo')));
formData.set('content', saveSlashes(formData.get('content')));
});
})();
Ze saiquiouriti ?
Niveau sécurité, le plugin n'intervient que sur la page article.php et uniquement sur les champs chapo et content du formulaire. Il ne bloque pas le plxUtils::unSlash($_POST)
du prepend.php. Je pense donc qu'il n'ouvre pas de faille majeure.
Ze conclugionne
Ainsi, les antislashes de ce script tiré de l'article sur le bug de mpdération passent enfin sans problème :
Exemple de code problématique
const PATTERNS = array(
'arts' => '#^\D?(\d{4,})\.(?:\w+|\d{3})(?:,\w+|,\d{3})*\.\d{3}\.\d{12}\..*\.xml$#',
'statiques' => '#^(\d{3,})\..*\.php$#',
'commentaires' => '#^_?\d{4,}\.(?:\d{10,})(?:-\d+)?\.xml$#'
);
Le zip est à télécharger depuis mon repo : https://repo.warriordudimanche.net/ZIPFILES/ArticleBackslashesKeeper.zip
❝ 2 commentaires ❞
Fil RSS des commentaires de cet article
✍ Écrire un commentaire
les commentaires relevant du SPAM seront filtrés et dégagés direct...