Este es un seguimiento de una pregunta que publiqué en Stack Overflow pero no es necesario que la lea. - Estoy recapitulando los detalles pertinentes aquí.
Estoy probando una aplicación PHP que usa una base de datos MySQL como un almacén de datos. Estoy utilizando consultas parametrizadas exclusivamente, a través de una biblioteca ORM.
Descubrí que una solicitud POST en particular con una carga útil como esta:
id=3-2&value=whatever
modificará la fila de la base de datos donde id = 3
. Después de algunas investigaciones, se determinó que el valor "3-2" se pasa a la base de datos (a través de una consulta parametrizada) y selecciona la fila donde id = 3
, que luego se actualiza.
Ahora me parece que este es un defecto de seguridad: puedo manipular los datos en mi base de datos colocando un valor arbitrario para el parámetro id
. Es cierto que el rango de valores para los cuales es posible este tipo de ataque es limitado: el parámetro de ID debe ser una cadena con un número de prefijo, y ese número debe corresponder a una ID en mi base de datos.
Tengo dos preguntas:
-
¿Es esto realmente un error de seguridad que debería preocuparme?
-
¿A qué nivel debería abordarse esto en mi solicitud?
- ¿El servidor MySQL, tal vez cambiando algunos valores de configuración?
- ¿La biblioteca de ORM, tal vez verificando el valor de la ID utilizada antes de intentar consultar la base de datos?
- En mi código, ¿incluso antes de intentar crear una instancia del modelo?
¡Gracias por tu ayuda! Estoy empezando a aprender sobre seguridad y amp; cualquier entrada será útil!