1 pontos por GN⁺ 2024-02-05 | 1 comentários | Compartilhar no WhatsApp
  • As extensões de navegador formam um raro ecossistema de software hackeável que, ao contrário das plataformas de smartphones e desktops, permite que usuários modifiquem apps web de formas não previstas pelos desenvolvedores originais
  • As mais de 180 mil extensões na Chrome Store e a taxa de instalação em quase metade dos usuários do Chrome mostram que, quando existe um caminho fácil, até usuários comuns montam por conta própria uma experiência de uso personalizada
  • A ampla utilidade das extensões vem da abertura da web — código cliente legível por humanos, marcação semântica e layouts web padronizados — mais do que de APIs específicas por app
  • Extensões como preenchimento de senhas, leitura de kanji, anotações, bloqueio de anúncios e reprodução em 2x são pequenas ferramentas que funcionam em vários sites e criam uma experiência de software diferente do modelo centrado em grandes apps
  • Extensões maliciosas e violações de privacidade continuam exigindo atenção, mas, se houver equilíbrio entre acessibilidade, compatibilidade e permissões, é possível preservar a extensibilidade que permite aos usuários transformar mais profundamente o software que usam

Por que extensões de navegador são especiais

  • Discussões recentes sobre extensões de navegador se concentraram em extensões maliciosas que coletam histórico da web e nas limitações do Google a bloqueadores de anúncios, mas as extensões continuam sendo um caso especial de software guiado pelo usuário
  • Entre as principais plataformas de software, extensões de navegador são uma rara exceção que permite e incentiva usuários a modificar apps usados no dia a dia fora da intenção dos desenvolvedores originais
  • Em plataformas móveis e de desktop, esse tipo de modificação é raro ou impossível, mas no navegador isso se tornou uma atividade cotidiana
  • As extensões recuperam a sensação de que usuários podem controlar de forma mais profunda como usam seus computadores

Software montado pelo próprio usuário

  • Quando uma plataforma de software é aberta além de certo nível, a forma como usuários comuns se relacionam com software também muda
  • Se você instala quatro extensões para Gmail e altera desde o design visual até funções centrais, em certo sentido montou seu próprio cliente de e-mail
  • O usuário deixa de ser apenas um consumidor passivo de apps prontos e passa a construir diretamente um modo personalizado de usar o computador
  • Há mais de 180 mil extensões na Chrome Store, e quase metade dos usuários do Chrome instala extensões no navegador
  • Essa popularidade mostra que, quando existe uma forma fácil de estender software, muitos usuários realmente aproveitam essa oportunidade

Uma plataforma hackeável, não apenas APIs por app

  • Extensões de navegador têm casos de uso extremamente amplos: preenchimento de senhas, leitura de kanji japonês, simplificação do design visual do Gmail, destaque e anotação de artigos, salvar para ler depois, reprodução de vídeos em 2x e bloqueio de anúncios
  • O ponto central dessa amplitude é que a maioria das extensões modifica aplicações de formas que os desenvolvedores originais não planejaram especificamente
    • Quando um jornal japonês publica um artigo, ele não precisa considerar compatibilidade com uma extensão de leitura de kanji para que ela funcione
    • O desenvolvedor de extensões não fica preso a APIs específicas de app moldadas pela visão do desenvolvedor do app, e por isso tem mais liberdade criativa
  • Algumas características da plataforma web tornam possível essa extensibilidade não planejada
    • O modelo tradicional de distribuição web entrega ao navegador código cliente em forma legível por humanos
    • Mesmo quando o código é ofuscado ou compilado a partir de outras linguagens, source maps são importantes para preservar essa vantagem
    • O modelo de layout da web incentiva marcação semântica padronizada
    • Extensões de gerenciadores de senhas funcionam porque páginas web usam de forma consistente a tag form para envio de senha, em vez de implementações próprias
  • Mesmo quando um site não foi feito pensando em extensões, podem ser necessárias soluções inteligentes, mas isso em geral é viável com uma carga de trabalho razoável, sem anos de engenharia reversa
  • Pode haver tensão entre desenvolvedores de sites e de extensões, mas, quando o desenvolvedor do site não precisa fazer trabalho extra, é mais comum que aceite extensões criativas
  • Recursos de nicho desejados por poucos usuários podem ser criados como extensões por membros motivados da comunidade, reduzindo também a carga sobre desenvolvedores da aplicação

Ferramentas pequenas, não grandes apps

  • Muitas extensões de navegador funcionam como ferramentas de uso geral que melhoram a experiência em qualquer site
  • Uma extensão de anotações pode ser usada em toda a web sem exigir uma ferramenta diferente de destaque para cada artigo
  • Como um marca-texto físico, você aprende uma ferramenta e depois a aplica em muitos contextos, obtendo grande alavancagem
  • Em muitas plataformas de software, pensa-se que o sistema operacional fornece ferramentas transversais enquanto terceiros oferecem apps isolados, mas nas extensões de navegador terceiros também adicionam ferramentas
  • Software em unidades pequenas também muda a economia
    • A maioria das extensões é gratuita, e seu escopo funcional pequeno pode ser insuficiente para se sustentar como um negócio completo
    • Ainda assim, pessoas continuam criando extensões, e usuários obtêm grande benefício desses pequenos pedaços de software
    • Explorar a loja de extensões se parece mais com um mercado de pulgas de bairro do que com um supermercado
  • Softwares grandes feitos por gigantes da tecnologia não são a única forma possível

As raízes da abertura da web

  • Desde o começo da computação pessoal, existe uma tradição filosófica de ver o computador como um meio interativo em que o usuário acrescenta suas próprias ideias e cria suas próprias ferramentas
  • Essa tradição aparece em sistemas como Smalltalk, Hypercard e, mais recentemente, Dynamicland
  • Ao criar a World Wide Web, Tim Berners-Lee imaginava um sistema inserido nessa tradição
    • Sua visão era “um sistema em que compartilhar o que você sabe ou pensa seja tão fácil quanto aprender o que outras pessoas sabem”
    • Ele acreditava que o navegador web também deveria ser um editor de sites, mas o navegador Mosaic ganhou popularidade sem esse recurso, algo de que ele lamentou
  • No fim, a web se tornou um lugar onde qualquer pessoa pode publicar opiniões ou fotos por meio de plataformas de mídia social
  • Mas, dentro de apps como Facebook, você publica em formatos predefinidos e usa o app da maneira determinada por ele, inclusive com anúncios
  • As extensões de navegador vão além de apenas digitar em uma caixa de texto fornecida: elas permitem mudar profundamente como se usa qualquer aplicação da web
  • Elas oferecem uma descentralização que impede empresas que criam grandes sites de decidir todos os detalhes da experiência do usuário

Caminhos para tornar as extensões melhores

  • É necessário proteger usuários para que extensões maliciosas não violem sua privacidade
  • Acessibilidade

    • Hoje, para passar de usar extensões a criá-las, é preciso aprender bastante sobre desenvolvimento web
    • Também é difícil desenvolver extensões com facilidade dentro do próprio navegador
    • Poderia haver uma transição fluida entre editar um site nas ferramentas de desenvolvedor e publicar uma pequena extensão
  • Compatibilidade

    • Como extensões se conectam a sites de maneiras não suportadas oficialmente, atualizações do site podem quebrá-las temporariamente
    • Desenvolvedores de extensões às vezes precisam correr para corrigir mudanças
    • É preciso encontrar formas de conectar desenvolvedores de sites e de extensões de maneira estável sem depender de APIs explícitas para extensões
    • Marcação semântica limpa, CSS legível por humanos e source maps são práticas já existentes que facilitam o desenvolvimento de extensões
    • Se, após lançar uma nova versão de um software em nuvem, usuários pudessem continuar usando a versão anterior por três meses, desenvolvedores de extensões ganhariam tempo para se adaptar
  • Permissões

    • Extensões web podem modificar amplamente o cliente no navegador, mas não conseguem mexer no servidor
    • Se o servidor de um app de mídia social só oferece um endpoint para ver posts em ordem cronológica, uma extensão de navegador não consegue pesquisar todos os posts por palavra-chave
    • Repensar a fronteira cliente-servidor pode permitir mudanças mais profundas por extensões
    • Permissões mais fortes tornam os problemas de segurança e privacidade mais difíceis, mas é preciso buscar equilíbrio mantendo a extensibilidade como valor

A possibilidade das próximas plataformas

  • Beaker Browser e a comunidade da web descentralizada exploram formas de a web funcionar sem servidores centrais
  • Esse tipo de arquitetura pode dar aos usuários controle mais completo para modificar o lado “servidor” das aplicações web
  • O novo projeto de Tim Berners-Lee, SOLID, inclui o princípio de que usuários tenham maior propriedade sobre seus próprios dados
  • Com maior propriedade dos dados, usuários podem manipulá-los com mais flexibilidade por meio de extensões e outros softwares, para além do que as APIs de servidores de aplicações permitem
  • A computação ainda é jovem, e as plataformas mudam rapidamente
  • Extensões de navegador modernas e plataformas de smartphone existem há apenas cerca de dez anos
  • O quão abertas serão as plataformas do futuro é uma questão que precisaremos decidir coletivamente
  • Extensões de navegador são um exemplo de lugar onde usuários hackeiam no dia a dia o software que usam e o tornam seu

Atualização de 2024

  • Ao revisitar em 2024 este texto escrito em 2019, alguns projetos relacionados foram acrescentados
  • Foi criada uma extensão popular para Twitter, e a experiência de usar extensões como forma de corrigir problemas no software usado diariamente foi registrada neste texto
  • Durante o doutorado no MIT com Daniel Jackson, foi desenvolvido o Wildcard, que permite a não programadores criar extensões de navegador a partir de planilhas
  • Glen está trabalhando na ExtensionPay, uma plataforma de monetização para quem quer transformar extensões de navegador em projetos sustentáveis
  • Mais recentemente, no laboratório Ink & Switch, o trabalho tem seguido em direção a software maleável com IA

1 comentários

 
GN⁺ 2024-02-05
Opiniões no Hacker News
  • Sou o autor do texto. Escrevi isso há 5 anos e, desde então, minha convicção sobre o valor de software personalizável só aumentou, mas algumas ideias mudaram

    1. IA: a IA está ficando rapidamente boa em programação. A IA atual muitas vezes é fraca em arquitetura de alto nível, mas se sai bem em pequenas alterações locais, o que parece combinar bem com o código necessário para escrever extensões de navegador. Estou explorando essa direção e escrevi mais em “Malleable software in the age of LLMs”: https://www.geoffreylitt.com/2023/03/25/llm-end-user-program...
    2. Segurança: conversando com pessoas que criaram várias plataformas de extensão, incluindo APIs de extensão de navegador, passei a ver com mais clareza do que há 5 anos que segurança costuma ser o principal gargalo na distribuição de plataformas de extensão populares. É difícil proteger usuários comuns quando eles são levados a instalar, em softwares importantes, extensões invasivas de terceiros não confiáveis
      Ainda assim, acho que a discussão sobre extensões fica focada demais só em segurança, sacrificando outros valores. Em alguns casos, a capacidade de personalização pode ser importante a ponto de vir antes da segurança. Também há várias soluções possíveis. Em vez de instalar coisas de qualquer pessoa na internet, é possível trocar extensões dentro de relações de confiança, como colegas ou amigos, ou usar apenas extensões criadas pela própria pessoa. Programação assistida por IA pode tornar a criação própria mais realista, embora traga novos problemas de segurança. Também conheci pessoas com ideias de arquitetura de software que reduzem essa tensão central; há um exemplo em https://www.wildbuilt.world/p/inverting-three-key-relationsh...
    3. Acesso ao backend: na web centrada em servidores, tenho percebido cada vez mais que extensões de navegador muitas vezes ficam impedidas de fazer personalizações profundas por terem acesso apenas ao código do cliente. Pode ser que não consigam ler os dados desejados ou que não exista uma API de escrita para executar a ação necessária. Sou otimista sobre o que extensões conseguem fazer dentro dos limites do cliente, mas isso é uma limitação essencial da própria plataforma
      No laboratório onde trabalho hoje, Ink & Switch, estamos criando software local-first: software colaborativo em que os dados e o código ficam no meu dispositivo. Além de vantagens como privacidade, vejo isso como a base correta para extensões mais poderosas, já que os dados e o código do app não ficam trancados no servidor: https://www.inkandswitch.com/local-first/
    • O ponto central são os problemas de segurança das plataformas abertas. Se elas são abertas o bastante para que quem sabe o que está fazendo personalize o sistema como quiser, agentes mal-intencionados também podem convencer pessoas que não entendem bem a alterar o sistema de maneiras prejudiciais
      É ótimo poder criar seu próprio teclado personalizado no Android, mas não é nada bom alguém conseguir convencer seus avós a instalar um teclado com um keylogger embutido. Extensões de navegador sempre foram um ecossistema cheio de malware, e a piada de apagar barras de ferramentas do Internet Explorer dos pais toda vez que se volta para casa no Dia de Ação de Graças existe desde mais ou menos 1999
    • Se navegadores e sistemas operacionais móveis facilitassem fornecer recursos falsos a apps ou extensões, executar código não confiável poderia se tornar muito mais seguro
      “Sim, pode ler o conteúdo do meu celular. Para você, isso é todo o conteúdo e é tudo que existe. Só que, do meu ponto de vista, é apenas uma pasta, e uma pasta vazia. É um celular novo, afinal.”
      “Sim, esta é minha lista de contatos. Desculpe por estar quase vazia. Só tem um número premium caro. Espero que a sua matriz não ligue para ele.”
      “Sim, este é meu microfone. Obrigado. Eu imito bem o Rick Astley, né?”
      “Fotos do celular? Aqui estão. São todas fotos de nabos. Você gosta?”
    • Estou muito empolgado com a interseção entre software maleável, local-first e IA local. Parece o início de uma nova era do software e, se der certo, podemos recuperar das grandes empresas o controle sobre os dados e ter mais controle sobre propriedade e formas de trabalho
      Tenho interesse especial em ferramentas CRDT de uso geral, como Automerge ou Yjs, tornando-se formatos de arquivo-base para software local-first, com backends interoperáveis de sincronização e colaboração acoplados a elas. Usuários poderiam acessar diretamente os dados subjacentes com ferramentas padrão, e arquivos poderiam ser vinculados, incorporados, ramificados e mesclados entre si. Seria possível criar uma nova plataforma de hipermídia em que todos os documentos pudessem ser compartilhados, bifurcados e editados em tempo real. Gosto muito do trabalho da Ink & Switch e estou ansioso pelos próximos anúncios
    • Uma grande limitação das extensões de navegador é que, mesmo ao escrevê-las para uso próprio, não existe um método de instalação amigável ao usuário e extensível. Não há como dizer ao navegador que você confia em todas as extensões de um determinado diretório e quer que ele as carregue automaticamente sem assinatura e sem empacotá-las como XPI
      Não existe uma funcionalidade do tipo “coloque o código e o manifest em um diretório e o navegador usa”. Na época em que o antigo greasemonkey simplesmente carregava arquivos comuns do subdiretório gm_scripts/ no perfil do navegador, criei uma quantidade enorme de userscripts graças a essa distribuição simples. Naquele tempo, estender sites era divertido e fácil, mas a Mozilla acabou com tudo isso
      A distribuição é realmente horrível. Não tenho a menor intenção de enviar minha extensão para algum lugar na internet para ser assinada toda vez que eu fizer uma alteração em um código que escrevi para usar no meu próprio computador. Além disso, da última vez que verifiquei, a ferramenta de assinatura era um app NPM/node de mais de 100 MiB que eu teria que confiar, maior até do que o build do kernel Linux
    • Concordo em geral com a avaliação, mas o problema é que os fornecedores de navegadores muitas vezes retiram APIs, quebrando extensões boas e populares
  • Em 2024, o próprio modelo de extensões de navegador é muito problemático. A maioria das extensões de navegador, em termos de participação, são extensões do Google Chrome, e o Google Chrome está deixando claro, no processo de tentar aumentar sua receita, que nenhuma API está segura
    Quem cria extensões com as APIs do Chrome precisa saber que talvez esteja investindo esforço em algo que uma megacorporação pode simplesmente pisotear sem pensar. Como não quero viver nessa situação em que estrategicamente a derrota já está dada, acho que a discussão deveria ser sobre extensões do Firefox. O histórico do Firefox também não é exatamente bom. A mudança de alguns anos atrás para compatibilidade com o Google Chrome ainda é extremamente irritante. Mesmo assim, em termos qualitativos, é uma parte melhor com quem lidar

    • Deixando tudo isso de lado, extensões 1) aumentam a superfície de ataque do navegador, 2) com frequência foram vendidas ou tomadas por agentes maliciosos mediante pagamento, e 3) muitas vezes quebram coisas de forma sutil, o que é aceitável para usuários experientes, mas vira chamado de suporte para outros usuários. O ecossistema de extensões como um todo é uma bagunça
    • Extensões de navegador parecem ser mais usadas no Firefox. Isso porque o Google é hostil demais às extensões do Chrome. Com o declínio do Firefox, o mundo das extensões também encolheu
      Durante 10 anos usei algo chamado “Ad Limiter” tanto no Firefox quanto no Chrome, com o mesmo código. No ano passado, quando o Google apertou ainda mais o cerco aos bloqueadores de anúncios, enviou mensagens ameaçadoras, e desisti da versão para Chrome
    • Também dá para ver isso literalmente como algo que não é diferente de desenvolver em qualquer outro ambiente
    • Fico curioso para saber se o recurso de sincronização do Firefox já foi corrigido. Antigamente era preciso mover de fato os arquivos de perfil. Quando trabalhei com TI há muito tempo, o Firefox era um verdadeiro pesadelo para lidar em ambientes corporativos. Claro que, naquela época, também não dava para controlar a instalação de extensões do Chrome
    • Existe um padrão para extensões de navegador. Eu já criei extensões antes mesmo de esse padrão existir. Hoje é possível criar uma extensão que funciona no Chrome, Firefox, Edge e Safari
      Claro que também é possível usar APIs exclusivas de um navegador específico. Isso é realmente ruim, como criar um site exclusivo para um único navegador. O básico deveria ser compatível. E, como o código-fonte de uma extensão sempre pode ser visto, você pode modificá-la para uma versão que funcione bem no seu navegador e também compartilhá-la de novo
  • Como muitas extensões de navegador populares foram compradas por data brokers e usadas para extrair o histórico de navegação, é difícil dizer que elas foram subestimadas. O modelo de segurança e privacidade das extensões era, ou ainda é, bastante ruim, então é preciso ter muito cuidado
    Por exemplo, sei de uma extensão de captura de tela como a Awesome Screenshot que sugava o histórico do navegador e o enviava para um data broker israelense. Provavelmente é melhor que esse tipo de funcionalidade exista como recurso nativo do navegador

    • Como alguém que cria uma extensão de navegador paga antecipadamente, eu diria que extensões pagas antecipadamente são subestimadas
      A frase “se eu não sou o cliente, eu sou o produto” é tão verdadeira que já virou clichê. Mas e se eu for de fato o cliente? Acho que boa parte da desconfiança em relação a extensões vem do fato de ser difícil monetizá-las diretamente. Se você não está ganhando dinheiro com uma extensão e alguém aparece oferecendo comprá-la com um cheque razoável, é difícil recusar, especialmente se a extensão gera carga de suporte para o desenvolvedor. Claro que, como quase todo mundo, eu também tenho um preço, mas hoje acho que teria de ser na casa de 7 dígitos em dólares, talvez 8 dígitos, e ninguém vai pagar isso pela minha extensão. Por ser paga, a base de usuários é relativamente pequena e, justamente por isso, também não representa uma grande oportunidade para coleta de dados ou algum plano maligno
    • Por esses motivos e pela falta de permissões granulares, quando possível uso apps de desktop em vez de extensões e mantenho minha lista de extensões bem pequena. Basicamente instalo apenas extensões FOSS de autores “grandes” e confiáveis, como Raymond Hill, ou projetos que não serão vendidos
      Claro que apps de desktop também têm riscos, mas historicamente esse padrão de vazamento de dados após aquisição foi relativamente raro em apps de desktop. Especialmente no macOS, apps assinados ficam em sandbox e não conseguem fazer muita coisa sem permissão do usuário
    • É uma loucura eu ter de entregar todos os meus dados de navegação a um programador desconhecido só para usar abas verticais no Firefox. Por isso concordo que é melhor isso virar um recurso nativo do navegador
      É claro que muitas dessas extensões são open source e podem ser auditadas. Mas não tenho habilidade para encontrar código malicioso, então fico me perguntando se isso não poderia ser um bom caso de uso para IA. Gostaria de saber se alguém tem ideias sobre como criar bons prompts para detecção de malware
  • Eu gostaria que as extensões de navegador tivessem permissões mais granulares. Só que é difícil verificar se um software usa permissões de forma maliciosa, como dá para perceber pelo Obfuscated C Code Contest ou pelo Underhand C Contest. Também é difícil transmitir permissões com nuances ao usuário. A maioria dos usuários não lê ou não entende os detalhes técnicos, e pode ser facilmente induzida ao erro
    Há uma dica para usar extensões com mais segurança ao experimentá-las no Chrome. Vá em Profiles > Add profile > Continue without account para criar um perfil separado e instale nele a extensão desejada; isso fica completamente isolado dos logins em abas, histórico, cookies etc. do perfil normal. Da mesma forma, também é possível rodar o Chrome Beta ou o Chrome Canary junto com o Chrome normal para instalar extensões
    Por exemplo, você pode instalar dezenas de extensões de desenvolvimento web potencialmente perigosas nesse perfil e mantê-las separadas, como em uma sandbox, do perfil usado para banco pessoal ou login em sites da empresa. Não é prático para todas as extensões, mas faço assim para desenvolvimento web e uso só algumas extensões no perfil pessoal
    Na extensão de navegador que vendo, a permissão que eu realmente gostaria de solicitar é “poder observar apenas o tráfego de rede enviado e recebido por suas próprias abas”, mas, na prática, preciso pedir a permissão “ler e gravar todos os dados”. Por isso compartilho a dica acima na descrição: https://chromewebstore.google.com/detail/checkbot-seo-web-sp...

    • Como usuário do Firefox, eu gostaria que fosse possível desativar extensões por contêiner no Multi-Account Containers. Não preciso de nenhuma extensão em sites de banco. Dá para usar um perfil separado, mas a experiência de uso é ruim
    • A permissão “ler e alterar todos os dados” é uma grande barreira para extensões de compras. Na prática, elas só precisam identificar páginas de compras. Para tentar construir confiança, publiquei o código aberto da análise de rastreamento: https://github.com/Score-Extension/score-extension-analytics...
      Espero que a transparência seja uma forma de superar essa barreira de confiança
    • Seria bom se houvesse uma forma de limitar todo o escopo das permissões de uma extensão por uma lista de domínios permitidos. No Chromium há uma forma de definir uma lista de domínios em que a extensão pode ser executada[1], mas, pelo que vi, isso não afeta permissões mais amplas, como o histórico geral
      [1] Basta clicar em “Details” da extensão, mudar a opção “Allow this extension to read and change all your data on websites you visit” para “On specific sites” e adicionar os sites à lista de permitidos
    • No Windows, é possível usar apps empacotados pelo portableapps.com. É necessário colocar AllowMultipleInstances=true no .ini
  • “Extensões de navegador lembram a sensação de ter controle profundo sobre como usar o computador” — imagino que usuários de Linux vão querer dizer umas coisas sobre isso
    De forma mais geral, há bastante semelhança com a questão que eu tentava discutir em um texto que escrevi há alguns anos, “Is Open Source a diversion from what users really want?”. A empolgação com uma forma de “hackear” software sem mexer no sistema de build parece muito maior do que com o acesso completo, aberto e teoricamente ilimitado que o FLOSS oferece. Parece haver razões óbvias para isso, mas ainda assim é um pouco decepcionante
    Discuti isso aqui, contrapondo a abordagem scriptável, mas de código fechado, do Reaper à abordagem scriptável e open source do Ardour: https://discourse.ardour.org/t/is-open-source-a-diversion-fr...

    • Sou usuário de Linux, mas não concordo. Não é exatamente o mesmo problema. Se quiser, posso recompilar o kernel e também a maior parte do espaço de usuário. Mas isso dá trabalho, especialmente se você se afastar do upstream e precisar manter essa diferença no longo prazo
      Dá para fazer hacks interessantes com coisas como LD_PRELOAD, mas isso não chega nem perto da flexibilidade e da facilidade de acesso das extensões de navegador. Você tem o direito de modificar qualquer software como quiser, mas, na prática, o atrito para fazer isso é relativamente alto
    • A migração do Linux para o systemd foi uma experiência muito parecida com o declínio das extensões de navegador. Claro que posso mudar o comportamento do meu computador. Mas, se eu não estiver disposto a investir muito esforço para manter essa mudança, as APIs que uso são cortadas debaixo dos meus pés, e fica cada vez mais difícil fazer meu computador se comportar como eu quero, e não como alguém achou que deveria se comportar
    • Extensões parecem uma forma de contornar assinatura de código, distribuição e construção de marca. Por isso navegadores como o Chrome viram plataformas para distribuir e executar software
  • Criei uma extensão do Chrome recomendada na Chrome Web Store[1], e é realmente preocupante a quantidade de corretores de dados suspeitos que me enviam propostas para comprar minha extensão e enchê-la de spyware
    Um desenvolvedor ingênuo pode criar algo legal e vender achando que alguém vai mantê-lo, quando na verdade isso pode colocar os usuários em risco. O Google parece analisar o uso de permissões razoavelmente bem, mas há extensões, como a minha, que precisam acessar tudo na página. Só imaginar o que um corretor de dados poderia fazer com isso já basta. É preciso ter cuidado ao instalar
    [1] https://chromewebstore.google.com/detail/css-selector-helper...

  • Acho que o mais necessário é um view source para extensões de navegador instaladas pela loja. Deveria ser fácil ver o código-fonte e extrair a extensão do navegador como uma pasta
    Também deveria ser fácil saber quais páginas web ela acessa e o que modifica. Código minificado ou criptografado dentro de extensões deveria ser proibido, e o código deveria ser muito fácil de ler. Por exemplo, esta extensão diz que “registra a atividade do usuário”, mas é difícil saber o que isso significa na prática: https://chromewebstore.google.com/detail/coffeelings/hcbddpp...

    • No Chrome, se você for para chrome://extensions e ativar o modo de desenvolvedor, é possível ver o código-fonte de qualquer extensão no devtools. Scripts de conteúdo já podem ser vistos no devtools de uma página web comum, mesmo sem ativar o modo de desenvolvedor
      A lista completa de sites pode ser vista no pop-up de instalação da extensão. A Chrome Web Store já proíbe ofuscação de código. Minificação é permitida, porque não há uma forma significativa de impor qualidade nos nomes de variáveis
    • É possível ver o código-fonte de extensões de navegador publicadas na Chrome Web Store sem instalá-las. Às vezes uso esta ferramenta para isso: https://robwu.nl/crxviewer/
      Ela não vai ajudar com código intencionalmente ofuscado, mas deve ajudar em pesquisas de segurança e privacidade sobre a maioria das extensões
  • Embora não sejam extensões completas, userscripts e estilos de usuário conseguem fazer bastante coisa, e há extensões que permitem que as pessoas os criem e usem dentro do navegador. Por exemplo, Tampermonkey[0] e Stylus[1]
    Mesmo que não consigam fazer tanta coisa quanto extensões, acho que são extremamente importantes
    [0] https://www.tampermonkey.net/
    [1] https://chrome.google.com/webstore/detail/stylus/clngdbkpkpe...

    • userscripts são subestimados. Uso para todo tipo de coisa. Por exemplo, conserto a landing page inútil do GitHub para ir para meus repositórios, faço o botão “follow” do Mastodon funcionar hardcodando o domínio da minha instância e bloqueio resultados inúteis como stackshare nos resultados de busca do Google
      Também uso para redirecionar a visualização de “short” do YouTube para a visualização normal de vídeo e para remover a margem idiota à direita da barra de rolagem do Gmail
  • Não trabalho com JavaScript/TypeScript, mas programo, uso muitas extensões e me considero um power user que jamais usaria um navegador sem o ecossistema de extensões do Chrome/Firefox. Já fiz temas para Chrome e VSCode, mas continuo neste ponto. Se você gosta de rosa/ciano, está aqui: https://marketplace.visualstudio.com/items?itemName=mikejk8s...
    Só pelo prompt do Chrome, não faço ideia do que uma extensão pode fazer, ler, ver ou acessar. “Permitir acesso aos dados em todos os sites” significa realmente todos os dados? O que eu digito também? Ela sabe quando navego de uma URL para outra? Ela só lê os recursos? Existe uma API do Chrome que limite o acesso, e eu consigo ver isso? Não sei com o que eu deveria realmente me preocupar
    Uso uma extensão de zoom de vídeo que permite ampliar qualquer vídeo em qualquer site; devo auditar cada extensão pessoalmente para verificar se ela não está copiando meus dados para algum lugar? Não tenho a menor ideia, e como um usuário não técnico poderia saber disso?

    • Parece ser tão ruim quanto soa. Por isso, como outra pessoa disse, só confio esse tipo de permissão de acesso a algumas extensões essenciais, como uBlock e Bitwarden
      Eu teria cuidado especial com produtos de startups de gravação de tela/sessão. Mesmo que não por outro motivo, porque podem ser especialmente vulneráveis a ataques de cadeia de suprimentos
    • Sim, é ruim nesse nível. Já escrevi algumas webexts e, quando você solicita todos os dados, é realmente todos os dados. Se é preciso mudar algo na página, de que outra forma isso funcionaria?
      Por isso mantenho minha lista apenas com extensões pontuais que eu mesmo fiz, extensões grandes e conhecidas, ou aquelas cujo código auditei pessoalmente
  • Prefiro bookmarklets. São fáceis de editar, ficam inativos até você clicar, funcionam em todos os navegadores, inclusive no mobile, e se integram bem à UI
    Dá para movê-los como quiser, colocá-los em qualquer pasta de favoritos e até atribuir atalhos. Criei um editor que facilita a conversão entre código limpo e bookmarklet: https://www.gibney.org/bookmarklet_editor

    • Site bem útil. Da última vez que mexi com bookmarklets, eles não funcionavam no Firefox para Android, mas agora funcionam. Deve ser útil com a minha instância do Node-RED
      Fico curioso se há bons bookmarklets para compartilhar