[SPIP Zone] Safehtml et attributs : previsu porteplume

Bonjour,
issue des questions que je me posais sur le lazyloading coté privé et la previsualisation du porteplume.
Les attributs data- des modèles inssérables sont supprimés du html via le traitement safehtml appliqué à la prévisualisation du porteplume.
En regardant la lib safehtml je me suis rendu compte que data est considéré comme :
1 - un protocole blacklisté
2 - un attribut qui est supprimé d’office , certes quand il est utilisé sur une balise object
le cas de html5 data- est différent, et il serait bien que safehtml en tienne compte, on peut outre le problème du lazyloading ou l’image n’apparait carrément pas, imaginer un modèle avec data-column=”” …
Chez Drupal il font de la sorte ici :
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Component%21Utility%21Xss.php/function/Xss%3A%3Aattributes/8.2.x
ceci me parait plutot bien et moins restrictif
que dans safehtml ou tout ce qui est, contient, commence par data est dégagé :

// l329 lib/safehtml
if (strpos($name, 'data') === 0) {
                    continue;
                }

la regex des attributs doit être adaptée aussi pour prendre en compte les attributs composés d’un tiret -
dans la lib lazysize.js on as la possibilité d’utiliser un autre prefix pour définir l’attribut que data- donc en modifiant juste la regex ça fonctionne, mais on est plus valid html5…

qu’en pensez vous ??

Mist. GraphX a écrit le 28/07/2017 à 18:10 :

Bonjour,
issue des questions que je me posais sur le lazyloading coté privé et la previsualisation du porteplume.
Les attributs data-/des modèles inssérables sont supprimés du html via le traitement safehtml appliqué à la prévisualisation du porteplume.

Et ça donne quoi avec cette alternative à safehtml :
svn://zone.spip.org/spip-zone/_plugins_/htmlpurifier

(qu'il faudrait que je synchronise avec la lib officielle
http://htmlpurifier.org/)

--
RealET

Le 28/07/2017 à 20:25, RealET a écrit :

Mist. GraphX a écrit le 28/07/2017 à 18:10 :

Bonjour,
issue des questions que je me posais sur le lazyloading coté privé et la previsualisation du porteplume.
Les attributs data-/des modèles inssérables sont supprimés du html via le traitement safehtml appliqué à la prévisualisation du porteplume.

Et ça donne quoi avec cette alternative à safehtml :
svn://zone.spip.org/spip-zone/_plugins_/htmlpurifier

(qu'il faudrait que je synchronise avec la lib officielle
http://htmlpurifier.org/)

j'ai testé mais c'est similaire.

Par contre je n'ai pas étudié le code pour voir si on pouvais gérer ou personaliser une whithelist des attributs.

de tout ce que j'ai parcouru/lu aujourd'hui je n'ai pas retenu de problème de sécurité concernant l'attribut html5 data-*
contrairement a l'attribut data de la balise object qui lui peut être problématique… mais bon je ne suis pas un expert, d'ou mes intérogations, questions …

--
Bonne journée
Arnaud B. (Mist. GraphX)

Je viens de regarder un peut plus en détail,

https://stackoverflow.com/questions/29305441/htmlpurifier-allow-data-attibute

comme c’est expliqué ici htmlpurifier construit sa whitelist en fonction :

  • d’un element

  • d’un attribut

  • des valeurs autorisées dans ce contexte

c’est très bien foutu, mais du coup complexe a ajouter

et encore plus depuis un plugin qui devrait alors pouvoir ajouter son “vocabulaire”

par exemple :


    $config = HTMLPurifier_Config::createDefault();
    $config->set('Cache.SerializerPath', preg_replace(',/$,', '', realpath(_DIR_TMP)));
    $def = $config->getHTMLDefinition(true);
    $def->addAttribute('img', 'data-src', 'URI');

    if (!isset($purifier))
        $purifier = new HTMLPurifier($config);