[WIP] Refactoring de la mise en sécurité des textes dans ecrire et public
#5271
Open
cerdic
wants to merge 12 commits from refactor_texte_safety
into master
pull from: refactor_texte_safety
merge into: spip:master
spip:1.8
spip:1.9.1
spip:1.9.2
spip:2.0
spip:2.1
spip:3.0
spip:3.1
spip:3.2
spip:4.0
spip:4.1
spip:boutons-danger
spip:debug_ecrire_fichier
spip:dev-sortable
spip:dev/autoloader
spip:dev/instituer_ergo
spip:dev_infos_image
spip:fix/valider_url_distante
spip:fix_modifier_login
spip:issue_4101
spip:issue_4678
spip:issue_4705
spip:issue_4717
spip:issue_4946
spip:issue_5016
spip:issue_5056_composer_road
spip:issue_5272_php_82
spip:issue_5273
spip:master
spip:neversayoupsagain
Reviewers
Request review
No reviewers
Labels
Amélioration, nouvelle fonctionnalité APIs authentification base de données bug
Ca ne fonctionne pas code généré compilo css divers documentation doublon
Ce ticket est un doublon ergonomie espace privé filtres et balises formulaires Inscription installation invalide
Ticket invalide javascript langues LDAP plugin PostgreSQL refusé
Ignoré, c'est comme Ca... sécurité traduction
Apply labels
Clear labels
accessibilité
amélioration
Amélioration, nouvelle fonctionnalité APIs authentification base de données bug
Ca ne fonctionne pas code généré compilo css divers documentation doublon
Ce ticket est un doublon ergonomie espace privé filtres et balises formulaires Inscription installation invalide
Ticket invalide javascript langues LDAP plugin PostgreSQL refusé
Ignoré, c'est comme Ca... sécurité traduction
No Label
accessibilité
amélioration
APIs
authentification
base de données
bug
code généré
compilo
css
divers
documentation
doublon
ergonomie
espace privé
filtres et balises
formulaires
Inscription
installation
invalide
javascript
langues
LDAP
plugin
PostgreSQL
refusé
sécurité
traduction
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
This pull request currently doesn't have any dependencies.
Reference in new issue
There is no content yet.
Delete Branch 'refactor_texte_safety'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
suite à spip-contrib-extensions/htmlpurifier#2 et à la relecture de #3926 j'ai donc entrepris un refactoring des appels à
echapper_html_suspect()
pourfiltrer_javascript=-1
qui était un peu cassé vu qu'on affichait du contenu échappé dans le public, ce qui est pas très user friendlyAu passage j'ai remarqué que
traiter_modeles()
était totalement inutilement forkée dans textwheel ce qui simplifie pas la maintenance. Je l'ai donc déplacée dans uninc/modeles
que j'ai refactoré ensuite pour séparer la detection des modeles de leur traitement, et que j'ai complété par 2 fonctions rapides d'echappement/reinjection pour permettre de passer safehtml sur du contenu sans casser les modeles.Bref tout ça est un peu plus propre et ça à l'air pas plus mal selon mes tests
Cette PR va avec spip/textwheel#4844 (il faut tester les 2 ensemble)
et donc la 3ème PR sur SafeHtlm pour passer à Purifier complète le tout
spip/safehtml#4781
(mais cette dernière n'est pas indispensable, elle est simplement rendue possible par les 2 PR sur le core et textwheel)
Les 3 PR sont notées en WIP car je pense qu'il faut une bonne relecture et tester un peu intensivement avant d'intégrer, et il manque la maj du changelog.
Mais pour le reste c'est OK pour moi: chez moi ça marche (tm)
Sur la forme des logs :
b4252f1f69
preferentiellement => de préférenceTesté avec les 3 PRs "actives" sous PHP 7.4 (cf spip/safehtml#4781) avec les listes de XSS suivantes :
Je n'arrive plus à mettre la main sur une liste compilée de chez OSWAP, qu'on a souvent mentionné ici, pour la tester, je ne retrouve que ça https://cheatsheetseries.owasp.org/cheatsheets/XSS_Filter_Evasion_Cheat_Sheet.html
En tout cas, ça semble bien efficace :)
Est-ce que ça vaudrait le coup qu'on teste ça sur un site de la communauté ? Je pourrais tenter de passer spip.net en 4.2 et le brancher sur les PRs.
J'ai complété la PR
->
transformé en->
ou ne soient perdus lors de la sanitization dans le public
qui semble aussi être parfois transformé en espace normal par safehtmlJe viens de tester de nouveau avec les derniers commits et j'ai un nouveau warning cf :
Sinon, tout est bon, aucune XSS de la liste ne passe.