#11 Remplir le validateur `css`

Abierta
abierta hace 1 año por Darks · 4 comentarios
Darks comentado hace 1 año

Pas évident, il s’agit de vérifier si le texte entré est du CSS valide et sain : il faut pouvoir éviter les injection de code ou d’images malveillantes.

Ça requiert un peu de théorie des langages je pense, enfin, à voir. Ou alors on part sur une whitelist à base de regex. Mais faut pas que ça soit trop souple non plus.

À voir, mais ça s’annonce pas super évident. Après c’est utilisé que par les admins donc la portée reste raisonnable, mais faire cette fonction propre permettra d'éviter les dégâts collatéraux en cas de compromission d’un compte administrateur.

Pas évident, il s'agit de vérifier si le texte entré est du CSS valide et sain : il faut pouvoir éviter les injection de code ou d'images malveillantes. Ça requiert un peu de théorie des langages je pense, enfin, à voir. Ou alors on part sur une whitelist à base de regex. Mais faut pas que ça soit trop souple non plus. À voir, mais ça s'annonce pas super évident. Après c'est utilisé que par les admins donc la portée reste raisonnable, mais faire cette fonction propre permettra d'éviter les dégâts collatéraux en cas de compromission d'un compte administrateur.
Darks añadida la etiqueta
enhancement
hace 1 año
Darks añadida la etiqueta
help wanted
hace 1 año
Eragon comentado hace 1 año
Colaborador

Le css, dans quel partie ?

Le css, dans quel partie ?
Darks comentado hace 1 año
Propietario

C’est un validateur, donc /app/utils/validators.py :) Actuellement sur la branche trophies

C'est un validateur, donc `/app/utils/validators.py` :) Actuellement sur la branche `trophies`
Lephenixnoir comentado hace 1 año
Propietario

Il y a une autre possibilité qui consiste à sécuriser le contexte pour qu’aucune injection ne soit possible. Par exemple, on pourrait générer un fichier CSS avec une classe par élément. Tant que le code CSS de chaque élément ne contient pas d’accolade, je ne pense pas qu’il puisse y avoir une injection.

Pour le reste, on peut également faire un coup de regex, ce n’est pas très dur. Il faut juste être un peu large sur les caractères autorisés dans les valeurs de propriétés.

Il y a une autre possibilité qui consiste à sécuriser le contexte pour qu'aucune injection ne soit possible. Par exemple, on pourrait générer un fichier CSS avec une classe par élément. Tant que le code CSS de chaque élément ne contient pas d'accolade, je ne pense pas qu'il puisse y avoir une injection. Pour le reste, on peut également faire un coup de regex, ce n'est pas très dur. Il faut juste être un peu large sur les caractères autorisés dans les valeurs de propriétés.
Lephenixnoir comentado hace 1 año
Propietario

Une première approche pourrait être de restreindre les noms des propriétés à [a-zA-Z-]+ et les valeurs à [^;{}]+. Je vois pas trop ce qui pourrait mal se passer avec ça puisqu’il n’y a pas moyen de tricher en ajoutant des règles.

La regex serait du genre \s*(?:<prop>;\s*)*<prop>;?\s*<prop> serait substitué par [a-zA-Z-]+\s*:\s*[^;{}]+.

Une première approche pourrait être de restreindre les noms des propriétés à `[a-zA-Z-]+` et les valeurs à `[^;{}]+`. Je vois pas trop ce qui pourrait mal se passer avec ça puisqu'il n'y a pas moyen de tricher en ajoutant des règles. La regex serait du genre `\s*(?:<prop>;\s*)*<prop>;?\s*` où `<prop>` serait substitué par `[a-zA-Z-]+\s*:\s*[^;{}]+`.
Inicie sesión para unirse a esta conversación.
Sin Milestone
No asignados
3 participantes
Notificaciones
Fecha de vencimiento

Sin fecha de vencimiento.

Dependencias

Esta incidencia actualmente no tiene ninguna dependencia.

Cargando…
Aún no existe contenido.