Skip to content
Extraits de code Groupes Projets
Valider c7cdcd87 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

fix: sanitizer les SVG séparemment du reste du HTML vu que HTMLPurifier ne connait pas les SVG

Refs: #4786
parent 50087102
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -34,7 +34,6 @@ function inc_safehtml_dist(string $t): string {
if ($iniFile = find_in_path('safehtml/htmlpurifier.ini')) {
$config->loadIni($iniFile);
} else {
$config->set('Attr.EnableID', true);
$config->set('HTML.TidyLevel', 'none');
$config->set('Cache.SerializerPath', rtrim(realpath(sous_repertoire(_DIR_CACHE, 'html_purifier')), '/'));
......@@ -52,6 +51,14 @@ function inc_safehtml_dist(string $t): string {
$purifier = new HTMLPurifier($config);
}
$hasSVG = false;
// échapper les SVG si il y en a
if (stripos($t, '<svg') !== false) {
include_spip('sanitizer/svg');
$t = echappe_html($t, 'safehtml', false, ',<(svg)(\b[^>]*)?>(.*)</\1>,UimsS', 'safehtml_');
$hasSVG = true;
}
// HTML Purifier prefere l'utf-8
$charset = (empty($GLOBALS['meta']['charset']) ? _DEFAULT_CHARSET : $GLOBALS['meta']['charset']);
if ($charset === 'utf-8') {
......@@ -60,5 +67,15 @@ function inc_safehtml_dist(string $t): string {
$t = unicode2charset($purifier->purify(charset2unicode($t)));
}
if ($hasSVG) {
$t = echappe_retour($t, 'safehtml');
}
return $t;
}
// Sanitizer les <svg>...</svg> lors de leur échappement
function safehtml_traiter_echap_svg_dist($regs, $options = []) {
return sanitizer_svg_string($regs[0]);
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter