sql >> Base de Datos >  >> RDS >> Mysql

La mejor manera de asegurar consultas SQL en PHP

La consulta que ha mostrado en la pregunta no utiliza valores proporcionados por el usuario, por lo que no hay ningún caso de inyección de SQL, sino un caso general:-

En primer lugar, debe validar todos la entrada del usuario (nombres de usuario, correos electrónicos, etc.) antes de usarla en una consulta. Por ejemplo:- Si ha permitido solo caracteres alfanuméricos en un nombre de usuario, debe verificar si la entrada es realmente alfanumérica o no antes de proceder a formar una consulta de base de datos y también debe verificar el tamaño de todas las entradas.

Después de eso, en mi opinión, las declaraciones preparadas son la mejor opción para prevenir la inyección de código SQL.

Problema con mysql_real_escape_string():-

Como mysql_real_escape_string() escapa de los caracteres de acuerdo con el conjunto de caracteres predeterminado, es mejor que la función addedlashes() y desinfecta correctamente Inyecciones de SQL que surgen del abuso de conjuntos de caracteres de varios bytes , pero en otro artículo aquí , se muestra un escenario alternativo que explica que aún se puede realizar la inyección.

Solución:-

Entonces, la forma adecuada y mejor de prevenir la inyección de SQL es usar declaraciones preparadas. Es una técnica en la que las declaraciones SQL se precompilan antes de la inserción de la entrada del usuario (parámetros) y se tratan como plantillas SQL reutilizables. Por lo tanto, separa la entrada del usuario del código SQL real y el analizador SQL nunca analiza la entrada del usuario.

Además de la seguridad, también optimiza la velocidad de la consulta SQL. Ayuda en los casos en los que necesita ejecutar la misma consulta varias veces con diferentes entradas de usuario.

Puede consultar el manual de PHP para obtener detalles de implementación.