¿MySQL CONCAT con PDO es suficiente para proteger a los LIKE de la inyección de SQL?

3

Estoy desarrollando un sitio web accesible al público y accesible al usuario, donde el usuario puede ingresar un término de búsqueda hostil y arbitrario. Después de eso, la aplicación debe hacer algo así conceptualmente contra una base de datos MySQL

  

SELECCIONE campos DE LA tabla DÓNDE campo1 LIKE% user_input%

Debo hacer que esto suceda de una manera segura con inyección SQL. Así que mi primer pensamiento es usar DOP como lo estoy haciendo en cualquier otro lugar:

  

SELECCIONE campos DE LA tabla DONDE campo1 MEJOR: user_input_placeholder

     

$ arrParam = array (": user_input_placeholder" = > '%'. $ user_input.   '%')

Pero esta concatenación de cadenas no me parece segura en absoluto: si el usuario proporciona "entrada de usuario _% _ ', ese porcentaje no se escapará y se analizará como un carácter especial de SQL. Esto ya huele peligroso.

alguien más en SO parece estar de acuerdo y propone hacer esto:

  

SELECCIONE los campos DESDE la tabla DÓNDE campo1 LIKE CONCAT ('%',: user_input_placeholder, '%')

     

$ arrParam = array (": user_input_placeholder" = > $ user_input)

Esto me parece mejor, pero, aún así, no estoy 100% seguro de que esto sea libre de inyección de SQL. ¿Podría por favor confirmar que esta es la forma correcta de hacerlo? Si no es así, proporcione un ejemplo que falla.

Nota: debo permanecer portátil y usar la función PDO, por lo que mysql_escape_string () no es una solución. También preferiría no eliminar de forma manual las ofertas de SQL como% o _.

    
pregunta Dr. Gianluigi Zane Zanettini 30.09.2015 - 15:41
fuente

1 respuesta

1

Use SELECT fields FROM table WHERE LOCATE(:user_input_placeholder, field1) > 0 pero no tengo idea de lo rápido / lento que sería.

Consulte enlace para la definición de LOCATE(substr, str)

  

Devuelve 0 si substr no se encuentra en str , o devuelve la posición de la ocurrencia

    
respondido por el Xenos 10.04.2017 - 10:30
fuente

Lea otras preguntas en las etiquetas