Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 7 Diciembre 2020, 21:08 pm



Título: [Pregunta]: ¿Existe una vulnerabilidad de inyección en esta consulta?
Publicado por: Leguim en 7 Diciembre 2020, 21:08 pm
Hola,

uso las consultas "prepare" que tengo entendido ayudan a prevenir las inyecciones SQL, ahora bien también escuche que no es recomendable por este tema concatenar datos a una consulta.

No estoy del todo seguro si en este caso existe una vulnerabilidad de inyección:

Código
  1. class x
  2. {
  3.     static function Consulta($x, $y)
  4.     {
  5.            $con = Connection(username, password);
  6.            $query = $con->prepare('SELECT x_campo, y_campo FROM x_tabla WHERE '.($x).' = '.($y));
  7.            $query->execute();
  8.    $results = $query->fetchAll();
  9.  
  10.    return $results;
  11.     }
  12. }
  13.  

aclarar que tanto los parametros $x, como $y son constantes y no son datos que el usuario envía, un ejemplo:

Código
  1. $datos = x::Consulta('id_user', 61); // son constantes, no datos que un usuario ingresa


Título: Re: [Pregunta]: ¿Existe una vulnerabilidad de inyección en esta consulta?
Publicado por: AlbertoBSD en 7 Diciembre 2020, 21:46 pm
aclarar que tanto los parametros $x, como $y son constantes y no son datos que el usuario envía, un ejemplo:

Código
  1. $datos = x::Consulta('id_user', 61); // son constantes, no datos que un usuario ingresa

Correcto no es vulnerable solo por esa parte, por que aseguras que son constantes.

Los prepare statements ayudan a prevenir los SQL injection si, si y solo si se utilizan como debe de ser, es decir  utilizando la funcion diseñada para pasar los parametros al sql statement bindParam()

De otra forma y tomando los datos directo del input del user si serian vulnerables.

Saludos!


Título: Re: [Pregunta]: ¿Existe una vulnerabilidad de inyección en esta consulta?
Publicado por: Leguim en 12 Diciembre 2020, 19:00 pm
Hola,

Código
  1. // tendría esto...
  2. $algo = 'algo';
  3. $algo_2 = 'algo';
  4.  
  5. $con = Connection(username, password);
  6. $query = $con->prepare('SELECT x, y FROM tabla WHERE x = :algo AND y = :algo_2');
  7. $query->execute(array(':algo' => $algo,
  8.                      ':algo_2' => $algo_2));
  9. $results = $query->fetchAll();
  10.  
  11. return $results;
  12.  
  13. // lo pasaría a esto, correcto?...
  14. $algo = 'algo';
  15. $algo_2 = 'algo';
  16.  
  17. $con = Connection(username, password);
  18. $query = $con->prepare('SELECT x, y FROM tabla WHERE x = :algo AND y = :algo_2');
  19. $query->execute(array(':algo' => bindParam($algo),
  20.                      ':algo_2' => bindParam($algo_2)));
  21. $results = $query->fetchAll();
  22.  
  23. return $results;
  24.  

Otra duda que me quedó es... entonces digamos que esas variables que había concatenado antes (arriba de todo, en el principio del tema) si no fueran constantes y si fueran datos que el usuario ingresa entonces SÍ habría una vulnerabilidad, no?

Gracias! (tardé en responder porque anduve bastante ocupado)


Título: Re: [Pregunta]: ¿Existe una vulnerabilidad de inyección en esta consulta?
Publicado por: Danielㅤ en 12 Diciembre 2020, 20:37 pm
Hola, todo dato ingresado por el usuario, tiene que ser sanitizado, nunca tenés que dejar pasar datos sin antes sanitizar, ni tampoco confiar en las restricciones que podes hacer desde javascript, eso serían solo avisos de que el usuario por ejemplo puede hacer tal cosa y tal otra no, PERO por detrás (del lado del servidor) se comprueba antes que lo que ingreso el usuario sea lo correcto.


Saludos