#11 Remplir le validateur `css`

Відкрито
5 місяці тому відкрито Darks · 4 коментарів
Darks прокоментував(ла) 5 місяці тому

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 added the
enhancement
label 5 місяці тому
Darks added the
help wanted
label 5 місяці тому
Eragon прокоментував(ла) 5 місяці тому
Співавтор

Le css, dans quel partie ?

Le css, dans quel partie ?
Darks прокоментував(ла) 5 місяці тому
Власник

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 прокоментував(ла) 5 місяці тому
Власник

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 прокоментував(ла) 3 місяці тому
Власник

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*[^;{}]+`.
Підпишіться щоб приєднатися до обговорення.
Етап відсутній
Немає виконавеця
3 учасників
Дата завершення

Термін виконання не встановлений.

Залежності

Ця проблема в даний час не має залежностей.

Завантаження…
Відмінити
Зберегти
Тут ще немає жодного змісту.