Prevención de la inyección de fórmula CSV peligrosa

0

Tengo un formulario que toma las entradas del usuario y las registra en una tabla. Mi formulario sanea la entrada del usuario al eliminar ciertos caracteres (mencionados a continuación). Puedo exportar un CSV de la tabla, que genera las celdas tal como están.

La forma correcta de evitar una inyección de CSV es prefijar una comilla simple al inicio de una celda que se parece a una fórmula, es decir, las que comienzan con = , + , - , @ o | .

Sin embargo, si la entrada en su lugar escapa caracteres como ; , ! y | al eliminarlos antes de que se registren en la tabla para la exportación de CSV, ¿será suficiente por sí solo?

Hasta ahora, la única 'inyección' que he logrado hacer es '= SUM (1 + 1)', debido a que es imposible usar cargas populares como @SUM(1+1)*cmd|' /C calc'!A0 o DDE ("cmd";"/C calc";"!A0")A0 , ya que los caracteres clave se ponen eliminado.

    
pregunta Yuu 02.08.2018 - 12:34
fuente

1 respuesta

2

No creo que quitar algunos caracteres pueda ser una solución sólida, especialmente si desarrolla la funcionalidad por sí mismo: alguien podría evitar pasar esta verificación codificando estos caracteres para obtener ejemplos, y ejecutar la fórmula de todos modos (tal vez su El lector CSV, es decir, Excel, analiza la fórmula de manera diferente a usted y la ejecuta de todos modos. La mejor solución es utilizar mitigaciones ya probadas, como la que mencionó al poner una comilla al principio de la cadena. El Grupo NCC proporciona otra solución en este informe :

  

Al realizar una exportación CSV, para cualquier celda que comience con un =, -,   ", @, o +, agrega un espacio al principio y elimina cualquier carácter de tabulación   (0x09) en la celda. Alternativamente, anteponga cada campo de celda con una   comilla simple, para que su contenido sea leído como texto por el   editor de hoja de cálculo.

    
respondido por el meliot 02.08.2018 - 13:18
fuente

Lea otras preguntas en las etiquetas