Por qué la extensión de Grammarly rompía los sitios web
- En los últimos meses, recibió con frecuencia reportes de que el diseño de los sitios web se rompía de forma extraña
- Se descubrió que la causa era la extensión de navegador de Grammarly, así que la instaló personalmente para comprobarlo
Cómo se descubrió el problema
- La extensión de Grammarly solicita los siguientes permisos:
- Acceso a los datos de todos los sitios web
- Mostrar notificaciones
- Acceso a las pestañas del navegador
- Al hacer pruebas en Firefox, Grammarly inserta su propia hoja de estilos en la página web
- Esta hoja de estilos no puede detectarse directamente desde la página web (hoja de estilos oculta)
- Incluso elude la Content Security Policy
- También se inserta un elemento
<grammarly-desktop-integration> dentro de la etiqueta <html> (su propósito no está claro)
¿Por qué afectó a mi sitio?
Cómo respondió el autor
- Al principio, usó Mutation Observer para detectar los elementos insertados por Grammarly y sobrescribirlos con estilos
!important
- Después cambió el nombre de su variable CSS de
--rem a --🤡 (emoji Unicode)
- Los emojis son válidos como nombres de variables CSS
- Así puede evitar el conflicto con la configuración global de
--rem de Grammarly
La esencia del problema
- Como extensión web, Grammarly fuerza la inserción de estilos globales en todos los sitios web
- En especial, usar un nombre de variable CSS tan común como
--rem es muy perjudicial
- Dentro de su código usan nombres de clase aleatorios, así que no se entiende por qué aplicaron de forma global un nombre tan compartido
- El código se inserta incluso aunque no se use realmente la extensión
Conclusión y propuesta
- El autor contactó a Grammarly; hubo una respuesta rápida, pero no logró que lo conectaran con alguien que entendiera el problema a nivel técnico
- La solución ideal sería que Grammarly use un nombre de variable como
--🤡, y que el resto de los desarrolladores puedan usar libremente --rem
1 comentarios
Opiniones en Hacker News
Mi problema con las extensiones es un poco distinto. Distribuimos una extensión que facilita cambiar entre servidores proxy para pruebas de geolocalización
Al inyectar scripts o estilos en una página desconocida, ponerles un namespace a las variables es la cortesía mínima
Da miedo ver que muchas funciones de compartir pantalla y grabación incluyan por defecto intrusiones verdes en todos los sitios web
Soy ingeniero de la extensión de Grammarly. Perdón por arruinar la UX de dbushell.com
Ya pasé este problema al equipo de ingeniería
Tengo un problema parecido con Google Translate rompiendo mi app web
En el trabajo tenemos muchos errores de Sentry relacionados con extensiones del navegador
Me pregunto cuál sería la variable que más podría romper la web
Me pregunto cómo manejan las extensiones de navegador hostiles
Me pregunto si este método podría usarse para secuestrar plugins