Skip to content

$secu.buildSanitizePolicy

Description

Construit une policy de sécurisation à partir d'un ensemble de règles. La règle ainsi construite pourra être réutilisée pour traiter des valeurs issues d'une requête SQL ou reçues en paramètre de script.

L'exemple ci-dessous crée une règle qui autorise les éléments <i> ayant une classe (c'est par exemple le cas si un texte contient des icones selon la syntaxe bootstrap, comme <i class="bi bi-star"/>).

1
2
3
4
5
6
7
var sanitizePolicy = $secu.buildSanitizePolicy(
    [
        { allowAttributes: "class", onElements: "i" },
        { requireRelNofollowOnLinks: true },
        { allowElements: [ "i" ] }
    ]
);

L'objet créé peut ensuite être réutilisé pour nettoyer des valeurs. Par exemple on peut passer cette règle via l'option sanitize de la méthode $sql.mselect pour que Ewt applique le sanitize à toutes les valeurs reçues du SGBD.

1
2
3
$sql.mselect(query, [ input ],
             { format: "xhtml", escape: false,
               sanitize: sanitizePolicy });

Info

La plupart des méthodes peuvent recevoir des règles de nettoyage sous la forme de map, de tableau de maps ou d'objet pojo. L'intérêt de construire un objet pojo relève avant tout d'une question de performances : l'objet pojo est construit une seule fois et réutilisé tel quel, alors qu'un map ou un tableau de maps doit être parsé par le moteur à chaque fois. Il est donc plus efficace du point de vue des performances de pré-construire un objet pojo au moyen de $secu.buildSanitizePolicy.

Une liste exhaustive des options de nettoyages supportées est donnée dans ce chapitre.

Syntaxe

$secu.buildSanitizePolicy( rules )

Paramètres

rules string / map

Objet décrivant les options de nettoyages autorisées. Les règles reprennent les options de configuration de la classe HtmlPolicyBuilder. Les règles peuvent être données sous forme de string (p.ex "FORMATTING|BLOCKS"), sous forme de map (p.ex { allowAttributes: "src", onElements: "img" } ou sous forme de tableau de maps.

Les options de nettoyage sont décrites dans la documentation de la règle "sanitize" de la descript

Retour

Objet pojo référençant une PolicyFactory) décrivant la policy de nettoyage.

Exemple

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
var mypolicy = $secu.buildSanitizePolicy(
    [
        { allowElements: [ "i", "span", "button" ] },
        { allowAttributes: [ "class", "style" ] , onElements: [ "i", "span", "button" ] },
        { allowAttributes: [ "type", "onclick" ] , onElements: [ "button" ] }
    ]
);

var html = `Bla <i class="fa fa-check" onclick="alert('foo')"></i> bla <script>alert("bar");</script> bla`::t;
$logger.info("orig: ${html}");
$logger.info("sanitized: " & $secu.sanitize(html, mypolicy));

Traces générées par le code ci-dessus:

orig: Bla <i class="fa fa-check" onclick="alert('foo')"></i> bla <script>alert("bar");</script> bla
sanitized: Bla <i class="fa fa-check"></i> bla  bla