¿Se puede usar un carácter de expresión regular de espacio en blanco para realizar una inyección de javascript?

3

si quiero validar la entrada de un <textarea> , y quiero que contenga, por ejemplo, solo valores numéricos, pero incluso quiero dar a los usuarios la posibilidad de insertar nuevas líneas, puedo seleccionar los caracteres deseados con un javascript expresiones regulares que incluye incluso los caracteres de espacio en blanco.

/[0-9\s]/

La pregunta es: ¿se puede utilizar un whitecharacter para realizar inyecciones, XSS, incluso si creo que esta última opción es imposible, o cualquier otro tipo de ataque?

gracias

actualizacion

hola Polinomio, gracias por el consejo, junto con javascript debe haber un control del lado del servidor php, tienes razón, pero mi pregunta es sobre un caso en el que solo quiero recuperar o escribir información del archivo. javascript, por ejemplo, a través de objetos ActiveX, en ese caso podría haber un archivo guardado con código malicioso, que no se ha filtrado en el momento del filtrado de entrada.

    
pregunta webose 07.11.2012 - 20:13
fuente

2 respuestas

3

En la práctica, es muy poco probable que esto permita un ataque de inyección.

Sin embargo ... En teoría, hay situaciones inverosímiles en las que los espacios en blanco podrían llevar a un ataque de inyección. Por ejemplo, supongamos que el programa ejecuta un comando como el siguiente:

echo Something bad happened: code $n >> logfile

donde $n es el parámetro de solicitud que has saneado anteriormente. Si el atacante usa un valor como 42\n17 (donde \n representa una nueva línea), esto se convertirá en dos comandos:

echo Something bad happened: code 42
17 >> logfile

El primer comando se ejecutará, pero su salida no se guardará. El segundo comando activará un error command not found (no hay ningún programa llamado 17 ), por lo que no se ejecutará. La consecuencia es que no se agregará ningún mensaje al archivo de registro, contrariamente a la intención del programador.

Esto es muy poco probable, en casi todos los programas con los que es probable que se ejecuten. Entonces, probablemente puedas ignorarlo. Pero ... en teoría, supongo que podría suceder.

P.S. Su expresión regular se ve dudosa. Como dice @Rook, solo coincide con un solo personaje. Además, dependiendo de cómo se use, es posible que deba anclarlo. Tal vez quisiste decir algo como esto:

/^[0-9\s]+$/
    
respondido por el D.W. 08.11.2012 - 09:11
fuente
3

Sí.

Las versiones realmente antiguas de SpiderMonkey siguieron una parte de la especificación que decía que todos los caracteres de control de formato (Cf) se eliminaron del texto del programa antes de que se iniciara el análisis.

Esto significa que

"\CF\",alert(1337)//"

donde CF es un formato de control de formato invisible, el carácter parece ser una sola cadena, pero el analizador lo trató como equivalente a

"\",alert(1337)//"

o para separar tokens analizados con espacios en blanco

"\" , alert ( 1337 ) //"

Si un analizador JSON mal escrito suponía que \ seguido de cualquier carácter era una secuencia de escape, antes de reenviar la cadena a eval , entonces un atacante que controla la entrada podría obtener un código JavaScript arbitrario a eval .

Este ataque solo tiene interés histórico ahora, pero no asuma que no se volverán a cometer errores similares.

Los programadores a menudo escriben filtros de expresiones regulares que incluyen . pero olvidan que no coincide con las nuevas líneas.

Los modos de recuperación de errores complicados en los analizadores (como los analizadores CSS) a menudo usan saltos de línea como lugares para intentar reiniciar el análisis, por lo que las nuevas líneas pueden ser útiles para hacer que el contenido citado se interprete como un código como cuando un analizador reinicia el análisis porque vio qué parece ser una cadena literal no cerrada.

Lista blanca para que cualquier uso amplio de caracteres invisibles se deseche.

    
respondido por el Mike Samuel 08.11.2012 - 10:48
fuente

Lea otras preguntas en las etiquetas