Prevenire la pericolosa iniezione di CSV Formula

0

Ho un modulo che accetta l'input dell'utente e li registra in una tabella. Il mio modulo sanifica l'input dell'utente eliminando determinati caratteri (indicati di seguito). Posso esportare un CSV della tabella, che emette le celle così com'è.

Il modo corretto per prevenire un'iniezione CSV è prefissare una virgoletta singola all'inizio di una cella che assomiglia a una formula, cioè quelli che iniziano con = , + , - , @ o% % co_de.

Tuttavia, se l'input scappa caratteri come | , ; e ! eliminandoli prima che vengano registrati nella tabella per l'esportazione CSV, sarà sufficiente da solo?

Finora, l'unica 'iniezione' che sono riuscito a fare è '= SUM (1 + 1)', poiché è impossibile usare payload popolari come | o @SUM(1+1)*cmd|' /C calc'!A0 , come i personaggi chiave diventano cancellato.

    
posta Yuu 02.08.2018 - 12:34
fonte

1 risposta

2

Non credo che spogliare alcuni personaggi possa essere una soluzione strong, specialmente se si sviluppa la funzionalità da soli: qualcuno potrebbe riuscire a bypassare questo controllo codificando questi caratteri per gli esempi, e ottenere la formula eseguita comunque (forse la tua Il lettore CSV, ad es. Excel, analizza la formula in modo diverso da te e lo esegue comunque). La soluzione migliore è utilizzare le mitigazioni già testate, come quella che hai menzionato di mettere una virgola singola all'inizio della stringa. Un'altra soluzione è fornita da NCC Group in questo rapporto :

When performing a CSV Export, for any cell that starts with an =, -, ", @, or +, add a space to the beginning and remove any tab characters (0x09) in the cell. Alternatively, prepend each cell field with a single quote, so that their content will be read as text by the spreadsheet editor.

    
risposta data 02.08.2018 - 13:18
fonte

Leggi altre domande sui tag