2011-02-13 11 views
9

expertos en seguridad de PHP verdadero, ¿es PDO el camino a seguir o estaría bien con la clase Active Record de Codeigniter?PDO en Codeigniter - Protect vs SQL Injection

He leído http://codeigniter.com/forums/viewthread/179618/ y no estoy 100% convencido.
Normalmente me apoyo en expertos como Chris Shiflett y OWASP para obtener consejos de seguridad. http://shiflett.org/blog/2006/jul/the-owasp-php-top-5

He estado utilizando una clase de PDO DB elaborada en casa en lugar de los archivos de la base de datos de Codeigniter. Cada vez que lo cargo es un dolor relativamente pequeño para copiar. La razón principal por la que uso PDO es para protegerme de la inyección de SQL y no del uso de Active Record.

EDIT: no ser un SHILL pero me ha escrito una entrada después de los hechos sobre cómo integrar PDO in Codeigniter. Si alguien tiene comentarios, me gustaría escucharlos.

+0

Gracias por todas las buenas respuestas. Cada respuesta tiene un punto válido. Continuaré utilizando PDO por flexibilidad, seguridad, enlace de parámetros y porque tengo un conocimiento sólido de ello. – csi

+0

Leí tu publicación en el blog. Pero, ¿cómo puedo usar PDO en CI después de estas modificaciones? Consulte [¿Cómo puedo usar PDO en CodeIgniter 2?] (Http://stackoverflow.com/questions/5884761/how-can-i-use-pdo-in-codeigniter-2) – Jonas

Respuesta

6

Según la página a la que ha hecho referencia, la clase Active Record usa mysql_ funciones para el escape de cadenas. Eso significa que todavía está creando cadenas de SQL en PHP-land en lugar de usar API parametrizadas en la base de datos. Si bien puede estar libre de defectos conocidos en este momento, todavía es una mejor idea utilizar una API que siga un diseño más seguro.

+0

También limita el uso de MySQL. Hubiera pensado que CI sería más flexible – Phil

2

Si ya se encuentra en un lugar cómodo con su biblioteca PDO, no hay ninguna razón para dejar de usarlo en CI. Active Record es excelente si desea seguir los patrones de CI, pero no es un requisito en ningún sentido.

1

Tome un vistazo a http://codeigniter.com/user_guide/database/queries.html

La última sección, enlaces de consulta, le dice que usted puede utilizar los enlaces de consulta, que se escaparon de forma automática.

Aunque no son declaraciones realmente preparadas, es una simulación efectiva de las mismas.

9

Bueno, no hay una respuesta general para todas las preguntas de este tipo:

No es una varita, que es un mago.

(¡no sé donde he llegado hasta esta palabra, pero parece que soy único usarlo, pero lo más probable que lo escribo mal)

No hay nada bueno o malo en la propia tecnología.
Todo depende de las manos que lo usan.

  1. No hay nada inseguro en mysql, si se usa correctamente.
  2. PDO no es una protección mágica que cubre su espalda de todos los peligros por su presencia solamente.

cada vez que veo conversaciones cojos de inyección de SQL, siempre se trata de datos dinámicos solamente.
Si bien la mayoría del peligro proviene de otras partes de la consulta, por ejemplo, identificadores dinámicos. Donde PDO puede hacer un poco menos de nada para tratar con ellos.

Entonces, no puede haber una respuesta segura.
Puede usar la tecnología que desee, siempre que comprenda lo que está haciendo.
Y, por el contrario, si no entiende cómo funciona, pero solo cree que alguna tecnología está haciendo su trabajo de proteger su aplicación, ya está en problemas.

Eso es todo.

+0

Ese es un punto bastante bueno: la mayoría de las API de bases de datos no tienen en cuenta el escape de nombres literales (tablas, columnas, etc.). Recuerdo que era un problema con WordPress hace varios años cuando estaba interesado en portarlo a Postgres: el escapado es diferente para cada base de datos. – Tom

Cuestiones relacionadas