Pregunta

Aquí hay algunas posibilidades para iniciar la conversación:

  1. Escape de todas las entradas durante la inicialización.
  2. Escape de cada valor, preferiblemente al generar el SQL.

La primera solución no es óptima, porque luego necesita eliminar el escape de cada valor si desea usarlo en algo que no sea SQL, como generarlo en una página web.

La segunda solución tiene mucho más sentido, pero escapar manualmente de cada valor es una molestia.

Soy consciente de declaraciones preparadas, sin embargo encuentro MySQLi incómodo.Además, me preocupa separar la consulta de las entradas, porque aunque es crucial que el orden sea correcto, es fácil cometer un error y, por lo tanto, escribir datos incorrectos en los campos incorrectos.

¿Fue útil?

Solución

Como afirma @Rob Walker, las consultas parametrizadas son su mejor opción.Si está utilizando el último y mejor PHP, le recomiendo encarecidamente que eche un vistazo a DOP (Objetos de datos PHP).Esta es una biblioteca de abstracción de bases de datos nativa que admite una amplia gama de bases de datos (incluido MySQL, por supuesto), así como declaraciones preparadas con parámetros con nombre.

Otros consejos

Las declaraciones preparadas son la mejor respuesta.¡Tienes pruebas porque puedes cometer errores!

Ver este pregunta.

Yo optaría por utilizar declaraciones preparadas.Si desea utilizar declaraciones preparadas, probablemente desee consultar las funciones PDO para PHP.Esto no sólo le permite ejecutar fácilmente sentencias preparadas, sino que también le permite ser un poco más independiente de la base de datos al no llamar a funciones que comiencen con mysql_, mysqli_ o pgsql_.

Puede que la DOP valga la pena algún día, pero aún no ha llegado a ese punto.Es un DBAL y su punto fuerte es (supuestamente) facilitar el cambio entre proveedores.En realidad, no está diseñado para detectar inyecciones de SQL.

De todos modos, si desea escapar y sanear sus aportaciones, utilizar declaraciones preparadas podría ser una buena medida (lo apoyo).Aunque creo que es mucho más fácil, p.e.utilizando filtrar.

Siempre he usado la primera solución porque el 99% de las veces, las variables en $_GET, $_POST, y $_COOKIE nunca se envían al navegador.Tampoco escribirás código por error con una inyección SQL (a menos que no uses comillas en la consulta), mientras que con la segunda solución podrías olvidarte fácilmente de escapar de una de tus cadenas eventualmente.

En realidad, la razón por la que siempre lo he hecho de esa manera fue porque todos mis sitios tenían la configuración magic_quotes activada de forma predeterminada, y una vez que has escrito mucho código usando una de esas dos soluciones, se necesita mucho trabajo para cambiarlo. al otro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top