1 pontos por GN⁺ 2024-03-09 | 1 comentários | Compartilhar no WhatsApp
  • DontFuckWithPaste é uma extensão do Google Chrome que remove o comportamento de aplicativos web que bloqueiam copiar e colar em campos de entrada
  • O projeto considera que obrigar o usuário a digitar manualmente um endereço de e-mail ou valores de ferramentas como o 1Password acaba aumentando a possibilidade de erros de digitação
  • O usuário pode clicar no ícone da extensão para adicionar um site à lista de bloqueio, ajustar o padrão gerado automaticamente se necessário e salvá-lo
  • Quando a extensão está ativa na aba atual, o ícone fica azul, permitindo verificar o estado ativo/inativo por aba
  • A Version 2 usa a permissão tabs para que a extensão seja executada apenas em sites problemáticos, e a descrição de permissões do Chrome pode parecer mais ampla e assustadora do que o comportamento real

Extensão do Chrome que remove o bloqueio de copiar e colar

  • DontFuckWithPaste é uma extensão do Google Chrome que remove o comportamento de aplicativos web que impedem o usuário de copiar e colar
  • A responsabilidade por colar um endereço de e-mail incorreto em um campo de entrada é do usuário, e copiar e colar valores de uma ferramenta como o 1Password pode gerar menos erros do que digitar todos os caracteres manualmente
  • O objetivo da extensão é simplesmente remover as restrições de sites que bloqueiam eventos de copiar e colar

Como usar

  • A forma mais fácil de adicionar um site à lista de bloqueio é clicar no ícone da extensão
  • Depois, basta ajustar o padrão gerado automaticamente se necessário e clicar em "Save"
  • Após salvar, se o ícone da extensão aparecer em azul, isso significa que a extensão está ativa na aba atual

Mudanças e permissões na Version 2

  • A Version 2 é uma atualização importante da extensão e torna mais fácil fazer com que ela seja executada apenas em sites que tratam incorretamente eventos de copiar e colar
  • Ela também oferece visibilidade para verificar, por aba, se a extensão está ativa ou inativa
  • A permissão tabs é necessária para saber quando a aba ativa muda
    • O Chrome descreve essa permissão como "can read and change all your data on websites you visit"
    • O README afirma que essa descrição parece assustadora, mas que a extensão não se comporta assim na prática
  • Por ser um projeto open source, o usuário pode ler o código e verificar como a extensão funciona e o que ela não faz com os dados do usuário
  • Mais informações sobre o upgrade para a Version 2 estão disponíveis na wiki page

1 comentários

 
GN⁺ 2024-03-09
Opiniões do Hacker News
  • Bloquear a entrada do usuário acaba piorando a segurança da aplicação. Se não for possível copiar uma senha, até usuários que inicialmente usavam uma boa senha acabam trocando por uma menos complexa por causa do incômodo de digitá-la
    Quando se impõe uma entrada complexa e, ao mesmo tempo, impede que o usuário cole um valor gerado corretamente, a experiência do usuário também fica arruinada

    • Sistemas que exigem determinados caracteres também são um problema. Em vez de regras como “deve conter maiúscula, número e caractere especial”, prefiro gerar uma senha mais longa, mesmo que use apenas caracteres comuns. Porque é mais fácil quando às vezes preciso digitá-la manualmente
      Pior ainda é quando limitam até quais tipos de caracteres especiais são permitidos. É preciso editar de novo a senha já gerada só para remover certos caracteres
      Será que é tão difícil simplesmente mostrar a força da senha e orientar algo como “use mais caracteres; por exemplo, você pode usar quatro palavras”?

    • Como os usuários provavelmente não usam com frequência as regras especiais daquela interface, é bem provável que não se lembrem delas e acabem tentando primeiro copiar para a área de transferência

    • Em geral concordo que se deve permitir ao usuário usar recursos com os quais ele já está familiarizado, mas, se ele tem o hábito de copiar e colar credenciais, fica mais vulnerável a phishing
      Os gerenciadores de senha integrados do Firefox e do Chrome não inserem credenciais por engano em sites parecidos, mas o usuário pode muito bem fazer isso

  • Para oferecer uma experiência o mais fluida possível, a extensão precisa saber quando a aba ativa muda. Para receber esse evento, é necessária a permissão tabs, e o Chrome a descreve como “pode ler e alterar todos os seus dados nos sites que você visita”. Essa descrição é bem assustadora, mas isso definitivamente não é o que esta extensão faz. Como é um projeto open source, você pode ler todo o código a qualquer momento e verificar como esta extensão funciona e o que ela não faz com os dados do usuário
    O problema é que, mesmo que você tenha lido o código ou acredite que alguém o tenha lido, não há garantia de que isso continuará assim em atualizações futuras. A consciência do autor pode enfraquecer com o tempo, ou ele pode vender a extensão
    Pelo que sei, extensões do Chrome são atualizadas automaticamente e, mesmo que não fossem, esta extensão deveria ser um lembrete de que não se deve presumir que atualizações são seguras

    • O problema é que não existe um modelo alternativo de permissões para fazer isso. Já usei algumas extensões, e muitas vezes elas não conseguem fazer nada sem acesso total de leitura/escrita a todas as páginas
      Por exemplo, há uma extensão que gira imagens em -90/+90/180 graus ao clicar com o botão direito. O que se quer é apenas que o navegador avise quando houver uma tag de imagem, mas essa opção não existe
      No fim, é preciso embutir no código uma lista de permissões por página, pedir ao usuário que crie uma lista de permissões para cada página, ou solicitar permissão total de leitura/escrita para todas as páginas da web que o usuário visita

    • O autor está sendo o mais transparente possível sobre quais permissões são necessárias e por quê, e o motivo vem de fatores fora do controle dele; a reação parece cínica demais
      Tecnicamente está correto. No futuro, poderia fazer qualquer coisa
      Ainda assim, essa postura merece reconhecimento mais do que crítica

    • Não sei por que o post original linkou para um fork em vez do original. O original tem uma versão em bookmarklet que pode ser usada como alternativa
      https://github.com/jswanner/DontF-WithPaste?tab=readme-ov-fi...

    • É possível evitar esse problema baixando o código-fonte da extensão e usando “Carregar extensão sem compactação” no modo de desenvolvedor de extensões do Chrome. Assim, você pode ter certeza de que a extensão não vai mudar escondida
      Porém, não dou permissão para todos os sites a essa extensão; só a ativo por site

    • Por isso uso um gerenciador de pacotes do sistema para instalar e atualizar extensões de navegador
      Se a extensão de navegador necessária não estiver no repositório de pacotes, contribuo com o pacote e assumo a responsabilidade pela verificação contínua e pela manutenção

  • Para contornar esse problema, no Mac eu normalmente faço drag and drop do texto colado em algum lugar, como o campo de URL
    Mas bloquear colagem em nome da segurança é uma das coisas mais absurdamente idiotas, só ficando atrás de limites de tempo excessivamente curtos
    Gostaria de poder conhecer pessoalmente as pessoas que tomam esse tipo de decisão

    • Já fui obrigado a implementar logout automático após 30 minutos em um site que dificilmente tinha dados sensíveis. Isso porque uma empresa externa de teste de invasão marcou como problema a ausência de um limite de tempo curto
      Para mostrar ao cliente um resultado de teste de invasão aprovado, não havia alternativa senão seguir todas as constatações. Todo mundo sabia que era uma exigência idiota, mas a direção não deu opção além de implementar

    • Um fluxo idiota que enfrentei há pouco no login.gov. O gerenciador de senhas tinha o login salvo e, embora eu não me lembrasse dele, funcionou. Depois o site pediu um código de aplicativo autenticador, mas meus apps autenticadores não tinham nenhum item do login.gov
      Cliquei em “entrar de outra forma”, e a outra forma também era usar um aplicativo autenticador. Cliquei em “não consegue receber o código?”, e apareceu que eu precisava excluir a conta
      Ao clicar para excluir a conta, enviaram um e-mail; o e-mail dizia para esperar 24 horas até receber outro e-mail de exclusão de conta. Depois de 24 horas, recebi o e-mail que permitia excluir a conta
      Não sei o que havia naquela conta. Pelo uso para login, parecia que poderia ser sensível, mas, se é tão sensível e importante, por que a ação mais destrutiva, excluir a conta, é permitida? Por que dá para excluir só com e-mail, mas não para receber um código de autenticação?

    • Nem mesmo o MS Remote Desktop permite colar
      Para que eles acham que gerenciadores de senha existem?

  • No Mac, uso Hammerspoon e configurei o atalho Cmd+Shift+V para digitar os caracteres reais em vez de colar. Sempre funciona quando alguém faz esse tipo de coisa
    hs.hotkey.bind({"cmd", "shift"}, "V", function() hs.eventtap.keyStrokes(hs.pasteboard.getContents()) end)

    • No Windows, faço a mesma coisa com AutoHotkey. Foi útil também quando a GUI de conexão remota usa por padrão a área de transferência remota, ou em controles de aplicativos desktop legados que não dão suporte a colar
  • Keyboard Maestro também é um ótimo app para esse tipo de tarefa e insere um atraso adequado entre as teclas para evitar comportamentos estranhos. Algo em torno de 0,05 s

    • No Windows, faço a mesma coisa com AHK e uso os mesmos atalhos. Só coloco um pequeno atraso de cerca de 10 a 50 ms entre cada tecla. Caso contrário, a entrada às vezes pode ficar corrompida

    • Eu também adicionei isso, mas, na minha memória, Cmd+Shift+V é “colar sem formatação”, então uso option em vez de shift
      -- https://news.ycombinator.com/item?id=39640745
      hs.hotkey.bind({"cmd", "alt"}, "V", function()
      hs.eventtap.keyStrokes(hs.pasteboard.getContents())
      end)

    • Essa abordagem também resolve a interceptação de entrada exagerada do Google Sheets

  • Não deveria ser necessário confiar em um add-on para isso; deveria ser configurável no navegador
    No Firefox, é possível alternar dom.event.clipboardevents.enabled

    • Seria bom poder desativar seletivamente apenas o evento de “colar”. Em ferramentas de trabalho, botões como “clique para copiar este valor” são muito úteis, então é uma pena perder essa função toda vez que desativo eventos da área de transferência para evitar sites maliciosos

    • Na prática, essa configuração parece quebrar a função de colar em alguns web apps. Por exemplo, certos emuladores de terminal ou editores de texto

    • Ao clicar com o botão direito mantendo Shift pressionado, também dá para forçar a abertura do menu

    • Antigamente, essa configuração quebrava o copiar/colar do Google Docs. Faz tempo que não testo, então talvez já tenha sido corrigido

  • Eu também odeio quando sites bloqueiam colar, então essa extensão é bem-vinda. Especialmente em lugares como confirmação de número de conta, número de roteamento ou endereço de e-mail, e isso também quebra gerenciadores de senhas. É obviamente irritante implementar regras complexas de senha dizendo que é para impedir senhas fracas e, ao mesmo tempo, bloquear colar
    Mas eu mesmo já implementei esse tipo de medida de segurança diretamente em uma aplicação web. Recebi os requisitos e implementei, e perguntei ao cliente por que precisávamos fazer aquilo se “todo mundo” sabe que é ruim para a experiência do usuário e muito contraproducente para a segurança
    A resposta foi compliance. Era para passar em auditorias de segurança e provar a grandes clientes ou seguradoras que havia medidas de segurança padrão do setor
    Infelizmente, o banco não se importa com os 2% que usam gerenciadores de senhas. O restante ainda memoriza senhas, esquece delas e faz piada sobre isso como se fosse 2003

    • Dizem que “é preciso fazer por causa do compliance”, mas será mesmo?
      Nunca vi um requisito de compliance que não pudesse ser contestado de forma razoável. É só o resultado de consultores de compliance zelosos demais encontrando equipes que não se importam muito com os usuários. As pessoas não questionam nada direito

    • Nossa auditoria de compliance PCI apontou que não desativávamos o preenchimento automático nos campos do formulário de login. Não é o mesmo que desativar colar, mas vai nessa direção
      Pessoalmente, quando um site impede o uso do meu gerenciador de senhas (Bitwarden), eu simplesmente desisto

    • Se as formas de contornar o bloqueio de colar se espalharem demais, esses mesmos sites acabarão implementando teclados virtuais
      Se isso for fácil demais para usuários com tela sensível ao toque, talvez o próximo passo seja um mouse virtual para clicar no teclado virtual. Para distinguir humanos de computadores, ainda poderiam randomizar a aceleração do mouse

  • Uma alternativa antiga que apareceu aqui antes: um bookmarklet
    [1]: https://bookmarkl.ink/ashtonmeuser/6e3869d8e468e016f22a4b4de...

    • Bookmarklets são muito subestimados. Para esse problema, são uma solução simples e, mais importante, legível
  • Quando colar não funciona, normalmente clico com o botão direito → inspecionar elemento e escrevo $0.value="value from clipboard" no console. Funciona em quase todos os lugares
    Mexer no colar é parecido com desativar o preenchimento automático, e o padrão HTML5 é bem claro sobre quando isso deve ser desativado: “valores particularmente sensíveis (por exemplo, o código de ativação de uma arma nuclear) ou valores que nunca serão reutilizados (por exemplo, uma chave de uso único para login bancário)”

    • Essa parte parece um erro do padrão que prejudica a segurança. Qual é a justificativa? Que dedos humanos cometem menos erros do que gerenciadores de senhas?
      O único caso que me vem à mente é um malware alterando o valor da área de transferência para enganar o usuário e fazê-lo colar o valor errado. Mas, se abrirmos esse cenário, há todo tipo de forma de um malware interferir em campos digitados manualmente
  • Interceptar Ctrl-F está no mesmo nível

    • Um atalho que tem um significado no navegador muitas vezes tem um significado completamente diferente em outras aplicações. À medida que essas aplicações viram web apps, conflitos de atalhos podem surgir
      Pegue o Google Docs como exemplo: ao pressionar Ctrl-F em um documento ou planilha, você quer a busca do navegador ou a busca do próprio app? A maioria dos usuários quer a busca do app. Ao ler um site de notícias, a maioria provavelmente espera a busca do navegador
      Isso quer dizer que regras rígidas sempre têm exceções. Mas o problema de copiar/colar do texto original não tem exceção. Não mexam na minha área de transferência com bobagens de marketing e rastreamento

    • Há também casos meio legítimos que podem ser justificados. Por exemplo, ao visualizar um banco de dados do Notion, o Ctrl-F padrão é quase inútil; a busca do documento precisa trazer resultados pela API do Notion e, às vezes, também encontrar resultados relacionados aos itens exibidos na tela
      Eu disse “meio” porque, na verdade, eu preferiria que isso fosse mapeado para outro atalho. Ainda assim, entendo o argumento de que o usuário pode querer remapear
      No fim, isso vem da decisão de tratar documentos dessa forma desde o início. Na fronteira entre aplicações online e páginas web, a discussão fica complicada

    • Recentemente descobri que, depois de ser interceptado, se você pressionar Ctrl-F mais uma vez, a caixa de busca do navegador aparece
      Não lembro qual era o site, mas havia uma tooltip na caixa de busca interceptada informando isso. Fiquei curioso para ver se funcionava também na busca do Redocly; não havia tooltip, mas funcionou
      Não tenho certeza se isso funciona de forma universal ou se é um recurso não documentado da interface do Redocly e não funciona em lugares onde o desenvolvedor não teve essa consideração especial
      O ambiente era Chrome + OSX ou Windows

  • Não entendo por que os navegadores permitem que sites sobrescrevam seus próprios atalhos. Parece que teria sido necessário até código extra para isso funcionar
    Por exemplo, o Linear intercepta Cmd+F e oferece alguma coisa péssima no lugar da busca nativa do navegador, que funciona igual em qualquer lugar. Esse é o mesmo Linear que acha impossível você não querer edição Markdown WYSIWYG

    • A documentação da API da Stripe faz isso e é extremamente irritante. Ela trava meu M2 MacBook Pro por alguns segundos
      É inacreditável que, em 2024, eu ainda não consiga simplesmente dar um grep na documentação
  • Mais alguém percebeu que o texto original compartilhou um fork sem melhorias significativas em relação ao repositório original e recebeu 399 upvotes?

    • O autor do repositório original recusou um PR de suporte ao Firefox, então o dono do fork fez o fork para adicionar 6 linhas ao manifesto
      https://github.com/jswanner/DontF-WithPaste/pull/29
      Mas reconheço que a alteração não relacionada em .gitignore não tinha motivo para estar no PR original

    • Este é para Firefox e o outro é para Chrome, então talvez seja uma melhoria bem significativa

    • Acho que os upvotes vieram mais por um “sim, eu também odeio esse tipo de coisa” do que por um “obrigado pela ferramenta útil”

    • O fork é para suporte ao Firefox e, para quem nem usa Chrome, considero uma melhoria significativa. O repositório original é fácil de ver, mas encontrar um fork específico no GitHub é bem mais chato
      Se isso incomoda tanto assim, da próxima vez vou guardar só para mim. Não deve haver motivo para compartilhar algo interessante com outras pessoas no HN

    • Exato. Comparando com o repositório pai, há 3 arquivos alterados, e as mudanças são apenas o .gitignore e URLs atualizadas para o repositório do fork