¿Es posible la inyección de SQL a través de un número entero?

3

A continuación se muestra el siguiente pseudocódigo:

public  updated(int id) {

  // Note that variable **id** is not surrounded by single/double quotes. 

  sql = "Update table user set status=2 where user_id=**id** ";  

  // execute command
}

¿Es esto vulnerable a la inyección de SQL (inyección aritmética de SQL tal vez)?

    
pregunta GearLab 11.11.2016 - 13:33
fuente

2 respuestas

6

No, su consulta espera un número entero y se garantiza que obtendrá uno. Una vulnerabilidad de inyección de SQL solo surge cuando un atacante puede proporcionar datos inesperados que alterarían la consulta. Diferentes enteros no influyen en la sintaxis. Pero tan pronto como deja de imponer el tipo, se vuelve inseguro.

Como comentó @CodesInChaos, si usted es el autor de este fragmento, debería considerar utilizar consultas parametrizadas en su lugar. De esa manera, el tipo suministrado se vuelve irrelevante, lo que es más fácil de auditar y más difícil de romper por accidente.

    
respondido por el Arminius 11.11.2016 - 14:03
fuente
0

No se conocen técnicas para realizar inyecciones de SQL a través de enteros. Pero tenga en cuenta que los números no enteros son vulnerables a la inyección de SQL en algunos casos a través de Inyección de SQL lateral . No está claro si los enteros permanecerán seguros para siempre.

Como han mencionado otras respuestas, utilice consultas parametrizadas incluso para números y fechas.

    
respondido por el Egret 12.11.2016 - 03:09
fuente

Lea otras preguntas en las etiquetas