2012-09-12 25 views
9

¿Protege execute($input_parameter) de las inyecciones sql al igual que bindParam/bindValue?

Si la respuesta es sí, bindParam()/bindValue()/execute() son invulnerables a cualquier ataque sql-inject? ¿O debo tomar medidas para prevenir tales ataques ?.

¡Gracias por la ayuda!

Respuesta

0

Sí, hace lo mismo. No puedo decir que sea invulnerable, porque el motor SQL subyacente podría ser vulnerable. Pero eso realmente ya no está en tus manos.

Por lo tanto, por razones prácticas, sí, es seguro.

EDITAR: Mire el PHP Documentation (primer y segundo ejemplo). Uno es con bindParam() y el otro usa execute().

2

En cuanto a execute($input_parameters) siendo tan seguro como bindParam/bindValue/execute pasos separados, la respuesta parece ser básicamente, sí.

Sin embargo, es posible que deba tomar otras medidas dependiendo de cómo haya construido la cadena de consulta que pasa a su llamada PDO::prepare. No siempre es posible parametrizar todo en la cadena de consulta preparada. Por ejemplo, no puede usar un parámetro para una tabla o nombre de columna. Si permite datos de usuario o cualquier dato externo en esa cadena de consulta, debe desinfectar esos datos antes de pasar la cadena al prepare. Consulte estas preguntas StackOverflow para más detalles:

En general, usted debe estar filtrando todos los datos de entrada de todos modos, así que si quieres estar seguro extra que podría desinfectar cualquier datos de entrada que están destinados para cosas de tipo SQL usando los filtros apropiados para sus necesidades, o incluso escribiendo una función personalizada de CAMBIO DE FILTRO si lo desea. En el caso de nombres de tabla o columna provenientes de datos proporcionados por el usuario, una técnica de validación común es verificar los valores frente a las matrices de nombres permitidos.

Espero que esto ayude. Buena suerte. ¡Mantenerse a salvo! ;)

Cuestiones relacionadas