Não mexa com a tecnologia de colar (Paste)
(github.com/aaronraimist)- 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
tabspara 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
- O Chrome descreve essa permissão como
- 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
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
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)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=39640745hs.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.enabledSeria 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...
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 lugaresMexer 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)”
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
É 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
.gitignorenão tinha motivo para estar no PR originalEste é 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
.gitignoree URLs atualizadas para o repositório do fork