Por que a extensão do Grammarly quebrou sites
- Nos últimos meses, o autor recebeu com frequência relatos de que o layout de sites estava estranhamente quebrado
- A causa do problema foi identificada como a extensão de navegador do Grammarly, e ele mesmo a instalou para confirmar isso
Processo de descoberta do problema
- A extensão do Grammarly solicita as seguintes permissões:
- acesso aos dados de todos os sites
- exibição de notificações
- acesso às abas do navegador
- Em testes no Firefox, foi constatado que o Grammarly injeta uma folha de estilos própria na página
- Essa folha de estilos não pode ser detectada diretamente na página web (folha de estilos oculta)
- Ela até contorna a Content Security Policy
- Um elemento
<grammarly-desktop-integration> também é inserido dentro da tag <html> (a finalidade não está clara)
Por que foi no meu site?
Como o autor reagiu
- No início, ele usou um Mutation Observer para detectar os elementos inseridos pelo Grammarly e sobrescrevê-los com estilos
!important
- Depois, mudou o nome da sua variável CSS de
--rem para --🤡 (emoji Unicode)
- Emojis são válidos como nomes de variáveis CSS
- Assim, é possível evitar conflito com a definição global de
--rem do Grammarly
A essência do problema
- Como extensão web, o Grammarly força a injeção de estilos globais em todos os sites
- Em especial, usar um nome comum de variável CSS como
--rem é algo muito prejudicial
- Mesmo usando nomes de classes aleatórios internamente no código, não dá para entender por que aplicaram justamente uma nomenclatura pública de forma global
- O código é injetado mesmo sem usar de fato a extensão
Conclusão e proposta
- O autor entrou em contato com o Grammarly e recebeu uma resposta rápida, mas não conseguiu falar com alguém que entendesse tecnicamente o problema
- A solução ideal seria o Grammarly usar um nome de variável como
--🤡, deixando os demais desenvolvedores livres para usar --rem
1 comentários
Opiniões do Hacker News
O problema com a minha extensão é um pouco diferente. Distribuímos uma extensão que facilita alternar entre servidores proxy para testes de geolocalização
Ao injetar scripts ou estilos em páginas desconhecidas, usar namespace nas variáveis é o mínimo de educação
É assustador ver que muitos compartilhamentos e gravações de tela incluem por padrão invasões de tela verde em todos os sites
Sou engenheiro da extensão do Grammarly. Peço desculpas por ter estragado a UX de dbushell.com
Encaminhei esse problema para a equipe de engenharia
Tenho um problema parecido com o Google Translate quebrando meu web app
No trabalho, temos muitos erros no Sentry relacionados a extensões de navegador
Fico curioso sobre qual variável conseguiria quebrar mais a web
--primary-color: transparentFico curioso sobre como vocês lidam com extensões de navegador hostis
Fico curioso se dá para sequestrar plugins usando esse método