Ver Mensaje Individual
  #12 (permalink)  
Antiguo 26/12/2009, 23:12
jonatanc
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Evitar SQL Injection

Estimado no hablo sin sentido , hablo de forma tecnicamente correcta , a lo que me refiero con capas es que una aplicación web usted la puede dividir suponga segun el patrón de diseño MVC (Modelo - Vista - Controlador) , bueno teniendo este concepto ya introducido lo que me refiera a que usted podria plantear su aplicación en forma "cebolla" capas con la DB (Base de datos) es algo asi:

Suponga que dispone de este codigo (sin utilizar la tecnica de capas de abstracción):

Código PHP:
Ver original
  1. <?php
  2.  
  3. $link = mysql_connect($server,$user,$pwd);
  4. mysql_select_db($db,$link);
  5.  
  6. $consulta=mysql_query("SELECT * FROM goles WHERE autornombre='Messi'",$link);
  7.  
  8. ?>

El mismo codigo usando una capa de abstracción (fijate que la invente yo solamente para el ejemplo , la interface ni la libreria existen):


Código PHP:
Ver original
  1. <?php
  2.  
  3. include('alguna_capa_de_abstraccion_my_sql.php');
  4.  
  5. $link = new Capa($server,$user,$pwd,$db);
  6.  
  7. $consulta=$link->query("SELECT * FROM goles WHERE autornombre='Messi'");
  8.  
  9. ?>

Fijate la diferencia , en el primer codigo accedes directamente a funciones nativas de PHP , mientras que en el segundo codigo empleas la interface brindada por tu capa de abstracción mysql , de este modo en dicha capa puedes realizar todo tipo de validaciones y no necesitas propagar en forma manual dicho cambio a tu codigo , ya que en toda tu aplicación para realizar una consulta sql utilizaras query() y no utilizar mysql_query (nativa) , esto es una tecnica mucho más correcta para el diseño de aplicaciones escalables y aumenta tu productividad y seguridad de la aplicación (siempre que la capa de abstracción sea buena).

La ventaja prioritaria tmb de la utilización de capas de abstracción para manejo de base de datos es que si tu utilizas funciones nativas en el desarrollo de tu aplicación , digamos mysql_connect , al migrar ponele tu servidor a mssql porque la empresa lo quiere asi ahora , deberias cambiar todo lo que diga mysql_connect por mssql_connect , en cambio utilizando una capa de abstracción esto lo evitas y solo cambias en el fichero de configuracion de tu capa de abstracción (ya sea ADODB , PDO o cual fuere) el driver (manejador) que tienes que usar que ahora en vez de mysql sera mssql , es decir tu aplicación es totalmente migrable sin esfuerzos y eso enriquece tus desarrollos y te facilita la vida.

Espero que te haya quedad mas claro los conceptos :).

Por cierto me olvidaba al utilizar estas librerias securizas totalmente las consultas SQL , te olvidas de purificar los datos , solo te centras en diseñar la logica de la aplicación , por eso tiene muchisimas ventajas utilizarlas :).

Cualquier duda pregunta.

Saludos

Link referencia: http://adodb.sourceforge.net/
Link referencia: http://www.jourmoly.com.ar/php-data-objects-pdo/

Última edición por jonatanc; 26/12/2009 a las 23:20