¿Posible vulnerabilidad de inyección de SQL?

4

Soy un desarrollador y estoy creando un script para interactuar con los servidores de juegos para actualizar las estadísticas del jugador. Estaba enviando una solicitud POST con datos de formulario de varias partes y en el último límite accidentalmente tenía el límite incorrecto.

Content-Type: multipart/form-data; boundary=--------484554302

Pero faltaba un carácter ----------48455430-- que provocó esta respuesta del servidor:

MySQL error 1064 (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\r\n----------48455430-- = '' WHERE id = '463413'' at line 1)

No sé mucho sobre SQL pero esto parece una vulnerabilidad potencial. ¿Algún consejo?

    
pregunta Edward Severinsen 12.06.2018 - 12:11
fuente

1 respuesta

4

Parece que estás pasando todo lo que se supone que está en el conjunto de datos precedido a MySQL sin la codificación adecuada o el uso de declaraciones preparadas. Como resultado, MySQL está interpretando el límite como un código SQL y está generando un error que indica que no es un SQL válido.

Como mínimo, debe codificar cualquier dato que se incluya en las consultas SQL. Mejor aún, fuerce los datos a un tipo específico: si está esperando un entero, asegúrese de que solo se permiten enteros, rechazando todo lo que no sea un entero antes de que llegue a la base de datos. Aún mejor, haz eso y usa declaraciones preparadas.

Las declaraciones preparadas imponen la separación entre el SQL ejecutable y los datos que está utilizando dentro del SQL, por lo que incluso si los datos inesperados llegan a su fin, la base de datos no la tratará como parte de la declaración SQL, sino que intentará usarla como datos Están disponibles para los idiomas web más utilizados con las bases de datos más comunes. No son perfectos (consulte ) Son declaraciones preparadas 100% seguras contra ¿Inyección SQL? ) pero son mucho mejores que incluir datos en bruto.

    
respondido por el Matthew 12.06.2018 - 12:32
fuente

Lea otras preguntas en las etiquetas