Pourquoi l’extension Grammarly a cassé des sites web
- Ces derniers mois, l’auteur a souvent reçu des signalements de mises en page étrangement cassées sur des sites web
- La cause s’est révélée être l’extension de navigateur Grammarly, qu’il a lui-même installée pour le vérifier
Comment le problème a été découvert
- L’extension Grammarly demande les autorisations suivantes :
- accès aux données de tous les sites web
- affichage de notifications
- accès aux onglets du navigateur
- Lors d’une expérience sur Firefox, Grammarly injecte sa propre feuille de style dans la page web
- Cette feuille de style ne peut pas être détectée directement depuis la page web (feuille de style cachée)
- Elle contourne même la Content Security Policy
- Un élément
<grammarly-desktop-integration> est aussi injecté dans la balise <html> (but inconnu)
Pourquoi mon site ?
Réponse de l’auteur
- Au départ, il a utilisé un Mutation Observer pour détecter les éléments injectés par Grammarly et les surcharger avec des styles
!important
- Il a ensuite renommé sa variable CSS de
--rem en --🤡 (emoji Unicode)
- Les emojis sont valides comme noms de variables CSS
- Cela permet d’éviter le conflit avec la définition globale de
--rem par Grammarly
La nature du problème
- En tant qu’extension web, Grammarly injecte de force des styles globaux sur tous les sites web
- Utiliser un nom de variable CSS courant comme
--rem est particulièrement nuisible
- Alors même qu’ils utilisent des noms de classes aléatoires dans leur code interne, on comprend mal pourquoi ils ont appliqué globalement un nom aussi générique
- Le code est injecté même si l’extension n’est pas utilisée activement
Conclusion et proposition
- L’auteur a contacté Grammarly ; il a reçu une réponse rapide, mais sans réussir à être mis en relation avec un interlocuteur comprenant réellement le problème technique
- La solution idéale serait que Grammarly utilise un nom de variable comme
--🤡, afin que les autres développeurs puissent continuer à utiliser librement --rem
1 commentaires
Avis Hacker News
Mon problème avec les extensions est un peu différent. Nous déployons une extension qui permet de basculer facilement entre des serveurs proxy pour des tests de géolocalisation
Quand on injecte des scripts ou des styles dans une page inconnue, le minimum de politesse est de mettre les variables dans un namespace
C’est effrayant de voir à quel point le partage d’écran et les enregistrements incluent par défaut des intrusions visuelles sur tous les sites web
Je suis ingénieur sur Grammarly Extension. Désolé d’avoir cassé l’UX de dbushell.com
J’ai remonté ce problème à l’équipe d’ingénierie
J’ai un problème similaire avec Google Translate qui casse mon application web
Nous avons beaucoup d’erreurs sentry liées aux extensions de navigateur pendant le travail
Je me demande quelle variable pourrait le plus casser le web
Je me demande comment les gens gèrent les extensions de navigateur hostiles
Je me demande si cette méthode permettrait de détourner un plugin