#11 Remplir le validateur `css`

Otwarty
otworzone 1 rok temu przez Darks · 4 komentarzy
Darks skomentował(-a) 1 rok temu

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 dodał(-ęła) etykietę
enhancement
1 rok temu
Darks dodał(-ęła) etykietę
help wanted
1 rok temu
Eragon skomentował(-a) 1 rok temu
Współpracownik

Le css, dans quel partie ?

Le css, dans quel partie ?
Darks skomentował(-a) 1 rok temu
Właściciel

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 skomentował(-a) 1 rok temu
Właściciel

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 skomentował(-a) 1 rok temu
Właściciel

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*[^;{}]+`.
Zaloguj się, aby dołączyć do tej rozmowy.
Brak kamienia milowego
Brak przypisanych
Uczestnicy 3
Powiadomienia
Termin realizacji

Brak ustawionego terminu realizacji.

Zależności

To zgłoszenie nie ma w tej chwili żadnych zależności.

Ładowanie…
Nie ma jeszcze treści.