elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Top 20 herramientas Hacking más populares de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [Pregunta]: ¿Qué estoy haciendo mal con esta consulta PDO?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: ¿Qué estoy haciendo mal con esta consulta PDO?  (Leído 438 veces)
Leguim


Desconectado Desconectado

Mensajes: 651



Ver Perfil
[Pregunta]: ¿Qué estoy haciendo mal con esta consulta PDO?
« en: 4 Mayo 2021, 00:21 am »

Estoy mejorando todas mis consultas, antes usaba este método:

Código anterior (siempre use esto y funciona correctamente), como "dato curioso" en esta consulta sino concateno '.($by).' no me devuelve datos, es decir que no puedo usar :by en la consulta. No entiendo por qué (si me pudieran ayudar con eso también)
Código
  1. $con = Connection(USERNAME, PASSWORD);
  2. $query = $con->prepare('SELECT id_album FROM albums WHERE '.($by).' = :by_value');
  3. $query->execute(array(':by_value' => $by_value));
  4. $results = $query->fetchAll();
  5.  

Pero viendo un poco parece ser que hacerlo de la siguiente manera es más eficiente y seguro:
Pero me dice "Uncaught Error: Call to a member function bindParam() on bool" busqué el error pero veo ninguna relación con lo que escribí, lo ví varias veces pero parece que todo está correcto.
Código
  1. $con = Connection(USERNAME, PASSWORD);
  2. $query = $con->prepare('SELECT id_album FROM albums WHERE :by = :by_value');
  3. $query = $con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  4. $query->bindParam(':by', $by);
  5. $query->bindParam(':by_value', $by_value);
  6. $query->execute();
  7. $results = $query->fetchAll();
  8.  


En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.018


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Qué estoy haciendo mal con esta consulta PDO?
« Respuesta #1 en: 4 Mayo 2021, 00:43 am »

No creo que puedas parametrizar esa parte de la query. Hasta donde yo tengo entendido solo los valores, no los campos. Quizás se pueda hacer algo con la tabla de metadatos de MySQL pero no lo recomendaría.

El error sin embargo es porque PDO::setAtribute regresa true/false, así que ahí te cargas $query. Simplemente no guardes el resultado de esa función en $query... pero como te dije, no creo que puedas parametrizar esa parte de la query.

Y de la otra forma tienes que estar completamente seguro del contenido de $by porque ahí fácilmente tienes SQLi.


En línea

Leguim


Desconectado Desconectado

Mensajes: 651



Ver Perfil
Re: [Pregunta]: ¿Qué estoy haciendo mal con esta consulta PDO?
« Respuesta #2 en: 4 Mayo 2021, 20:21 pm »

Entonces tampoco se puede parametrizar los limites en una consulta, no?

Código
  1. "... ORDER BY id_x DESC LIMIT :start, :quantity"
  2.  

donde start es 0, y quantity es 10.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.018


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Qué estoy haciendo mal con esta consulta PDO?
« Respuesta #3 en: 4 Mayo 2021, 22:57 pm »

Al parecer creo que eso es posible. Creo que me equivoque cuando dije que solo podemos parametrizar valores... sobre todo cuando emulas los prepared statements. Pero al parecer nombres de columnas (o al menos usar un placeholder para multiples columnas) no es posible.
En línea

Leguim


Desconectado Desconectado

Mensajes: 651



Ver Perfil
Re: [Pregunta]: ¿Qué estoy haciendo mal con esta consulta PDO?
« Respuesta #4 en: Ayer a las 01:36 »

No creo que te hayas equivocado, esa consulta de los LIMIT :x, :y no funciona a no ser que concatene LIMIT '.($x).', '.($y)

No sé si se podría arreglar esta vulnerabilidad de inyecciones para estas variables que quedarán concatenadas, con alguna función para "limpiar". Para este caso puedo decir si es numerico x e y pero ya cuando la variable es una cadena se complica.
En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.018


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Qué estoy haciendo mal con esta consulta PDO?
« Respuesta #5 en: Ayer a las 03:40 »

No creo que te hayas equivocado, esa consulta de los LIMIT :x, :y no funciona a no ser que concatene LIMIT '.($x).', '.($y)

No sé si se podría arreglar esta vulnerabilidad de inyecciones para estas variables que quedarán concatenadas, con alguna función para "limpiar". Para este caso puedo decir si es numerico x e y pero ya cuando la variable es una cadena se complica.

Hay ejemplos en SO donde si funciona, pero tienes que especificar PDO::PARAM_INT al parámetro con PDOStatement::bindValue. En la misma documentación de MySQL hace mención que esto es posible. No veo porque el driver no lo habría de tomar en cuenta.
« Última modificación: Ayer a las 03:42 por MinusFour » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
programa de matriz aver si el programa q estoy haciendo esta bien « 1 2 »
Programación C/C++
eduardo17445 10 4,201 Último mensaje 23 Octubre 2012, 00:11 am
por flony
quisiera que me digeran si este foro q estoy haciendo esta bien c++
Programación C/C++
eduardo17445 4 1,350 Último mensaje 3 Diciembre 2012, 20:17 pm
por flony
[Pregunta]: Ejecutar esta consulta constantemente
PHP
Leguim 2 425 Último mensaje 15 Noviembre 2019, 00:17 am
por [u]nsigned
[Pregunta]: ¿Cómo puedo hacer esta consulta?
Bases de Datos
Leguim 6 388 Último mensaje 22 Abril 2021, 05:24 am
por Leguim
[Pregunta]: ¿Cómo hacer esta consulta 2?
Bases de Datos
Leguim 0 171 Último mensaje 23 Abril 2021, 00:07 am
por Leguim
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines