#11 Remplir le validateur `css`

Atvērta
Darks atvēra pirms 3 mēnešiem · 4 komentāri

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 pievienoja etiķeti
enhancement
pirms 3 mēnešiem
Darks pievienoja etiķeti
help wanted
pirms 3 mēnešiem
Eragon komentēja pirms 3 mēnešiem
Līdzstrādnieks

Le css, dans quel partie ?

Le css, dans quel partie ?
Darks komentēja pirms 3 mēnešiem
Īpašnieks

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 komentēja pirms 3 mēnešiem
Īpašnieks

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 komentēja pirms 1 mēnesi
Īpašnieks

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*[^;{}]+`.
Pierakstieties, lai pievienotos šai sarunai.
Nav atskaites punktu
Nav atbildīgo
3 dalībnieki
Izpildes termiņš

Izpildes termiņš nav uzstādīts.

Atkarības

Šai problēmai pagaidām nav nevienas atkarības.

Notiek ielāde…
Atcelt
Saglabāt
Vēl nav satura.