Browse Source

fix: une fonction is_html_safe() personalisable pour tester si une chaine est safe plutot qu'une simple comparaison de longeur avant/apres

par defaut on gere une comparaison un peu plus robuste pour passer le test via HTMLPurifier, mais la fonction est personalisable si on veut utiliser une autre lib
remotes/checkIfPRContentChanged-1659714283585166050/refactor_texte_safety
Cerdic 2 months ago
parent
commit
c512ab8315
  1. 19
      ecrire/inc/texte_mini.php

19
ecrire/inc/texte_mini.php

@ -549,7 +549,7 @@ function echapper_html_suspect($texte, $options = [], $connect = null, $env = []
// on teste sur strlen car safehtml supprime le contenu dangereux
// mais il peut aussi changer des ' en " sur les attributs html,
// donc un test d'egalite est trop strict
if (strlen(safehtml($texte)) !== strlen($texte)) {
if (!is_html_safe($texte)) {
$texte = $options['texte_source_affiche'] ?? $texte;
$texte = preg_replace(",<(/?\w+\b[^>]*>),", "<tt>&lt;\\1</tt>", $texte);
$texte = str_replace('<', '&lt;', $texte);
@ -622,6 +622,23 @@ function safehtml($t) {
}
/**
* Detecter si un texte est "safe" ie non modifie significativement par safehtml()
* @param $texte
* @return bool
*/
function is_html_safe($texte) {
if ($is_html_safe = charger_fonction('is_html_safe', 'inc', true)) {
return $is_html_safe($texte);
}
// simplifier les retour ligne pour etre certain de ce que l'on compare
$texte = str_replace("\r\n", "\n", $texte);
$texte_safe = safehtml($texte);
return strlen($texte_safe) === strlen($texte);
}
/**
* Supprime les modèles d'image d'un texte
*

Loading…
Cancel
Save