SlideShare una empresa de Scribd logo
Eliminando SQL injection



                    Stuardo -StR- Rodríguez
                    Web developer
                    La Maphpia
                    srodriguez@maphpia.com
OWASP
19/08/2011
                Copyright © The OWASP Foundation
                Permission is granted to copy, distribute and/or modify this
                document under the terms of the OWASP License.




                The OWASP
                Foundation
¿Quién soy?

Stuardo Rodríguez
  Promotor del software libre desde 1998
  Desarollador web en PHP desde 2000
  Fundador comunidad PHPGT
     /in/stuardo
     http://www.google.com/profiles/stuardo.str
  Actualmente trabajando para La Maphpia




                                         OWASP     2
Eliminando SQL injection

Agenda
  3 categorías de posible inseguridad
  ¿Qué es SQL injection?
  Como solucionar problemas de SQL injection
  Como ELIMINAR problemas de SQL injection
  Ir un paso mas allá.




                                       OWASP    3
3 categorías de posible inseguridad

Datos de entrada
Datos de salida
Entorno




    entrada         sistema    salida




                                 OWASP   4
3 categorías de posible inseguridad

Datos de entrada
Datos de salida
Entorno




    entrada         sistema    salida




                                 OWASP   5
¿Qué es SQL injection?

$_POST['email'] = “foo@bar.com');
    DROP TABLE users;
    -- ”;

$sql = “INSERT INTO users (username, password, email) VALUES
(
    '{$_POST['username']}',
    '{$_POST['pass']}',
    '{$_POST['email']}'
)”;

INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP        6
¿Qué es SQL injection?

$_POST['email'] = “foo@bar.com');
    DROP TABLE users;
    -- ”;

$sql = “INSERT INTO users (username, password, email) VALUES
(
    '{$_POST['username']}',
    '{$_POST['pass']}',
    '{$_POST['email']}'
)”;

INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP        7
¿Qué es SQL injection?

$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;

$sql = “INSERT INTO users (username, password, email) VALUES
(
    '{$_POST['username']}',
    '{$_POST['pass']}',
    '{$_POST['email']}'
)”;

INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP        8
¿Qué es SQL injection?

$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;

$sql = “INSERT INTO users (username, password, email) VALUES
(
    '{$_POST['username']}',
    '{$_POST['pass']}',
    '{$_POST['email']}'
)”;

INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP        9
Como solucionar
problemas de SQL injection
Método automático
  magic_quotes
     Existe desde PHP2
     Creado para “ayudar” a programadores novatos a
      escribir código “seguro”
     Escapeaba con  cualquier ',”, o caracter NULL.




                                               OWASP     10
Como solucionar
problemas de SQL injection
Método automático
  magic_quotes
     No todos los datos de entrada son para ser insertados
      en SQL.
     No todos los datos a ser insertados vienen en un
      campo del formulario.
     magic_quotes usa addslashes() que no es seguro
      para escapar texto unicode.
     No todas las bases de datos usan  para escapear '




                                                OWASP         11
Como solucionar
problemas de SQL injection
Método automático
  magic_quotes
     No todos los datos de entrada son para ser insertados
      en SQL.
     No todos los datos a ser insertados vienen en un
      campo del formulario.
     magic_quotes usa addslashes() que no es seguro
      para escapar texto unicode.
     No todas las bases de datos usan  para escapear '
     GENERA IGNORANCIA!




                                                OWASP         12
Como solucionar
problemas de SQL injection
Método automático
  filter_input()
  filter_var()
  filter_input_array()
  filter_var_array()




                             OWASP   13
Como solucionar
problemas de SQL injection
Método automático
  filter_input()
  filter_var()
  filter_input_array()
  filter_var_array()
 SIGEN GENERANDO IGNORANCIA!




                             OWASP   14
Como solucionar
problemas de SQL injection
Método manual
if (strpos($_POST['email'], ';'))
    throw new Exception('Invalid input');
if (strpos($_POST['email'], '''))
    throw new Exception('Invalid input');
if (strpos($_POST['email'], '”'))
    throw new Exception('Invalid input');
if (preg_match('/from|select|delete|insert|
where|drop|show|#|--|/ui',$_POST['email']))
    throw new Exception('Invalid input');



                                        OWASP   15
Como solucionar
problemas de SQL injection
Método manual
  mysql_escape_string()
  mysql_real_escape_string()




                                OWASP   16
Como solucionar
problemas de SQL injection
$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;

$sql = “INSERT INTO users (username, password, email) VALUES
(
    '{$_POST['username']}',
    '{$_POST['pass']}',
    '{$_POST['email']}'
)”;

INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP        17
Como solucionar
problemas de SQL injection
$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;

$sql = sprintf(“INSERT INTO users (username, password,
email) VALUES ('%s', '%s', '%s')”,
    mysql_real_escape_string ($_POST['username']),
    mysql_real_escape_string ($_POST['pass']),
    mysql_real_escape_string ($_POST['email'])
)”;

INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP   18
Como ELIMINAR
problemas de SQL injection
PDO
  ...




                             OWASP   19
Como ELIMINAR
problemas de SQL injection
$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;

$sql = sprintf(“INSERT INTO users (username, password,
email) VALUES ('%s', '%s', '%s')”,
    mysql_real_escape_string ($_POST['username']),
    mysql_real_escape_string ($_POST['pass']),
    mysql_real_escape_string ($_POST['email'])
)”;

INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP   20
Como ELIMINAR
problemas de SQL injection
$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;

$sql = $db->prepare('INSERT INTO users
    (username, password, email)
     VALUES (:username, :pass, :email)');
$sql->exec($_POST);




INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP   21
Como ELIMINAR
problemas de SQL injection
$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;

$sql = $db->prepare('INSERT INTO users
    (username, password, email)
     VALUES (:username, :pass, :email)');
$sql->exec($_POST);




INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP   22
Como ELIMINAR
problemas de SQL injection
PDO
  Módulo PECL para PHP 5.0
  Nace de DB y MDB de PEAR
  Por default en PHP 5.1




                              OWASP   23
Como ELIMINAR
problemas de SQL injection
$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;

$db = new PDO('mysql:host=localhost;
    dbname=example', $user, $password);

$sql = $db->prepare('INSERT INTO users
    (username, password, email)
     VALUES (:username, :pass, :email)');

$sql->exec ($_POST);


                                            OWASP   24
Ir un paso mas allá.

PDO es una capa de abstracción de acceso
 a datos
Usar una capa de abstracción de datos
  Doctrine




                                  OWASP     25
Ir un paso mas allá.

$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;

$sql = $db->prepare('INSERT INTO users
    (username, password, email)
     VALUES (:username, :pass, :email)');
$sql->exec($_POST);




INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                                  OWASP   26
Ir un paso mas allá.

$_POST['email'] = “foo@bar.com');
     DROP TABLE users;
     -- ”;



$user = new User();
$user->insert($_POST);




INSERT INTO USERS (username, password, email)
    VALUES ('str', 'password', 'foo@bar.com');
DROP TABLE users;
-- ');

                                             OWASP   27
Eliminando SQL injection

GRACIAS
  Stuardo -StR- Rodríguez
  srodriguez@maphpia.com
     /in/stuardo
     http://www.google.com/profiles/stuardo.str




                                         OWASP     28

Más contenido relacionado

La actualidad más candente

Wp config.php
Wp config.phpWp config.php
Wp config.php
gregozz
 
Sentencias create
Sentencias createSentencias create
Sentencias create
Base de Datos
 
NOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVANOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVA
Shirley Contreras Ulloa
 
Doctrine2 sf2Vigo
Doctrine2 sf2VigoDoctrine2 sf2Vigo
Doctrine2 sf2Vigo
Ignacio Martín
 
Tallerprogramacion
TallerprogramacionTallerprogramacion
Tallerprogramacion
johanadoria
 
Symfony2 - ACL
Symfony2 - ACLSymfony2 - ACL
Symfony2 - ACL
Gonzalo Alonso
 
Modulo de programacion sql unidad II
Modulo de programacion sql   unidad IIModulo de programacion sql   unidad II
Modulo de programacion sql unidad II
firemas
 
Taler bd # 3
Taler bd # 3Taler bd # 3
Taler bd # 3
Beatriz Salazar
 
Taller de MySQL (DDL)
Taller de MySQL (DDL)Taller de MySQL (DDL)
Taller de MySQL (DDL)
mgpc
 
Gustavo php
Gustavo phpGustavo php
Gustavo php
Gustavo
 
Aplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slideAplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slide
marieuri
 
Triggers
TriggersTriggers
Triggers
bdatos
 
Copilacion de ejercicios en java
Copilacion de ejercicios en javaCopilacion de ejercicios en java
Copilacion de ejercicios en java
Jonathan Israel
 
Inyeccion sql by Anonymous - Americalatina
Inyeccion sql  by Anonymous - AmericalatinaInyeccion sql  by Anonymous - Americalatina
Inyeccion sql by Anonymous - Americalatina
Anonymous - Americalatina Anonymous - Americalatina
 
Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1
Jose Luis Orosco Marcos
 
Introduccion a SQL
Introduccion a SQL Introduccion a SQL
Introduccion a SQL
Renatta Rodriguez
 
Sesion 3
Sesion 3Sesion 3
Actividades unidad 3 pacheco
Actividades unidad 3 pachecoActividades unidad 3 pacheco
Actividades unidad 3 pacheco
UV ADMINISTRACION (SISTEMAS)
 
Sentencias SQL Update y Delete
Sentencias SQL Update y DeleteSentencias SQL Update y Delete
Sentencias SQL Update y Delete
Emerson Garay
 

La actualidad más candente (19)

Wp config.php
Wp config.phpWp config.php
Wp config.php
 
Sentencias create
Sentencias createSentencias create
Sentencias create
 
NOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVANOTACIÓN POSTFIJA E INFIJA - JAVA
NOTACIÓN POSTFIJA E INFIJA - JAVA
 
Doctrine2 sf2Vigo
Doctrine2 sf2VigoDoctrine2 sf2Vigo
Doctrine2 sf2Vigo
 
Tallerprogramacion
TallerprogramacionTallerprogramacion
Tallerprogramacion
 
Symfony2 - ACL
Symfony2 - ACLSymfony2 - ACL
Symfony2 - ACL
 
Modulo de programacion sql unidad II
Modulo de programacion sql   unidad IIModulo de programacion sql   unidad II
Modulo de programacion sql unidad II
 
Taler bd # 3
Taler bd # 3Taler bd # 3
Taler bd # 3
 
Taller de MySQL (DDL)
Taller de MySQL (DDL)Taller de MySQL (DDL)
Taller de MySQL (DDL)
 
Gustavo php
Gustavo phpGustavo php
Gustavo php
 
Aplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slideAplicaciones para sistemas distribuidos slide
Aplicaciones para sistemas distribuidos slide
 
Triggers
TriggersTriggers
Triggers
 
Copilacion de ejercicios en java
Copilacion de ejercicios en javaCopilacion de ejercicios en java
Copilacion de ejercicios en java
 
Inyeccion sql by Anonymous - Americalatina
Inyeccion sql  by Anonymous - AmericalatinaInyeccion sql  by Anonymous - Americalatina
Inyeccion sql by Anonymous - Americalatina
 
Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1
 
Introduccion a SQL
Introduccion a SQL Introduccion a SQL
Introduccion a SQL
 
Sesion 3
Sesion 3Sesion 3
Sesion 3
 
Actividades unidad 3 pacheco
Actividades unidad 3 pachecoActividades unidad 3 pacheco
Actividades unidad 3 pacheco
 
Sentencias SQL Update y Delete
Sentencias SQL Update y DeleteSentencias SQL Update y Delete
Sentencias SQL Update y Delete
 

Similar a Eliminando SQL injection

Mecanismos de protección contra inyección sql
Mecanismos de protección contra inyección sqlMecanismos de protección contra inyección sql
Mecanismos de protección contra inyección sql
Alejandra Toledano
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
I LG
 
Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todos
csaralg
 
INYECCION SQL(SEGURIDAD DE LA INFORMACION)
INYECCION SQL(SEGURIDAD DE LA INFORMACION)INYECCION SQL(SEGURIDAD DE LA INFORMACION)
INYECCION SQL(SEGURIDAD DE LA INFORMACION)
toshko86
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My Sql
Jose Ponce
 
Base de datos dinamicas
Base de datos dinamicasBase de datos dinamicas
Base de datos dinamicas
el_rosales
 
Php y my sql con manejo de sesiones
Php y my sql con manejo de sesionesPhp y my sql con manejo de sesiones
Php y my sql con manejo de sesiones
capo1988
 
Jquery para principianes
Jquery para principianesJquery para principianes
Jquery para principianes
Mauro Gomez Mejia
 
J M E R L I N P H P
J M E R L I N P H PJ M E R L I N P H P
J M E R L I N P H P
Mauro Gomez Mejia
 
Php y MySQL
Php y MySQLPhp y MySQL
Php y MySQL
Karis
 
Sesión 12 -Diseño de BD_Ciclo_3.pptx
Sesión 12 -Diseño de BD_Ciclo_3.pptxSesión 12 -Diseño de BD_Ciclo_3.pptx
Sesión 12 -Diseño de BD_Ciclo_3.pptx
John McClane
 
Práctica SQL en MYSQL
Práctica SQL en MYSQLPráctica SQL en MYSQL
Práctica SQL en MYSQL
lissette_torrealba
 
Asegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL InjectionAsegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL Injection
Chema Alonso
 
Inyección_sql
Inyección_sqlInyección_sql
Inyección_sql
jhom123
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
Jacqueline Nuñez Pacco
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
Jacqueline Nuñez Pacco
 
Julissa huaman hilari
Julissa huaman hilariJulissa huaman hilari
Julissa huaman hilari
Julissa Huaman Hilari
 
Apuntes php
Apuntes phpApuntes php
Documentacion jhon elvis_quispe_gutierrez
Documentacion jhon elvis_quispe_gutierrezDocumentacion jhon elvis_quispe_gutierrez
Documentacion jhon elvis_quispe_gutierrez
J̶h̶o̶n̶ Q̶u̶i̶G̶u̶t̶
 
Loguin
LoguinLoguin

Similar a Eliminando SQL injection (20)

Mecanismos de protección contra inyección sql
Mecanismos de protección contra inyección sqlMecanismos de protección contra inyección sql
Mecanismos de protección contra inyección sql
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
 
Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todos
 
INYECCION SQL(SEGURIDAD DE LA INFORMACION)
INYECCION SQL(SEGURIDAD DE LA INFORMACION)INYECCION SQL(SEGURIDAD DE LA INFORMACION)
INYECCION SQL(SEGURIDAD DE LA INFORMACION)
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My Sql
 
Base de datos dinamicas
Base de datos dinamicasBase de datos dinamicas
Base de datos dinamicas
 
Php y my sql con manejo de sesiones
Php y my sql con manejo de sesionesPhp y my sql con manejo de sesiones
Php y my sql con manejo de sesiones
 
Jquery para principianes
Jquery para principianesJquery para principianes
Jquery para principianes
 
J M E R L I N P H P
J M E R L I N P H PJ M E R L I N P H P
J M E R L I N P H P
 
Php y MySQL
Php y MySQLPhp y MySQL
Php y MySQL
 
Sesión 12 -Diseño de BD_Ciclo_3.pptx
Sesión 12 -Diseño de BD_Ciclo_3.pptxSesión 12 -Diseño de BD_Ciclo_3.pptx
Sesión 12 -Diseño de BD_Ciclo_3.pptx
 
Práctica SQL en MYSQL
Práctica SQL en MYSQLPráctica SQL en MYSQL
Práctica SQL en MYSQL
 
Asegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL InjectionAsegúr@IT 7: Serialized SQL Injection
Asegúr@IT 7: Serialized SQL Injection
 
Inyección_sql
Inyección_sqlInyección_sql
Inyección_sql
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
 
Jacqueline nuñez pacco
Jacqueline nuñez paccoJacqueline nuñez pacco
Jacqueline nuñez pacco
 
Julissa huaman hilari
Julissa huaman hilariJulissa huaman hilari
Julissa huaman hilari
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
Documentacion jhon elvis_quispe_gutierrez
Documentacion jhon elvis_quispe_gutierrezDocumentacion jhon elvis_quispe_gutierrez
Documentacion jhon elvis_quispe_gutierrez
 
Loguin
LoguinLoguin
Loguin
 

Más de Stuardo Rodriguez

Blockchain 3.0 - eosio
Blockchain 3.0 - eosioBlockchain 3.0 - eosio
Blockchain 3.0 - eosio
Stuardo Rodriguez
 
Dti datos abiertos
Dti datos abiertosDti datos abiertos
Dti datos abiertos
Stuardo Rodriguez
 
reCuento
reCuentoreCuento
Comunidades libres 3.0
Comunidades libres 3.0Comunidades libres 3.0
Comunidades libres 3.0
Stuardo Rodriguez
 
Guatemala Transparente @ hackatón Desarrollando America Latina 2014
Guatemala Transparente @ hackatón Desarrollando America Latina 2014Guatemala Transparente @ hackatón Desarrollando America Latina 2014
Guatemala Transparente @ hackatón Desarrollando America Latina 2014
Stuardo Rodriguez
 
Usando SVN para instalar un Wordpress seguro en Ubuntu Server
Usando SVN para instalar un Wordpress seguro en Ubuntu ServerUsando SVN para instalar un Wordpress seguro en Ubuntu Server
Usando SVN para instalar un Wordpress seguro en Ubuntu ServerStuardo Rodriguez
 

Más de Stuardo Rodriguez (6)

Blockchain 3.0 - eosio
Blockchain 3.0 - eosioBlockchain 3.0 - eosio
Blockchain 3.0 - eosio
 
Dti datos abiertos
Dti datos abiertosDti datos abiertos
Dti datos abiertos
 
reCuento
reCuentoreCuento
reCuento
 
Comunidades libres 3.0
Comunidades libres 3.0Comunidades libres 3.0
Comunidades libres 3.0
 
Guatemala Transparente @ hackatón Desarrollando America Latina 2014
Guatemala Transparente @ hackatón Desarrollando America Latina 2014Guatemala Transparente @ hackatón Desarrollando America Latina 2014
Guatemala Transparente @ hackatón Desarrollando America Latina 2014
 
Usando SVN para instalar un Wordpress seguro en Ubuntu Server
Usando SVN para instalar un Wordpress seguro en Ubuntu ServerUsando SVN para instalar un Wordpress seguro en Ubuntu Server
Usando SVN para instalar un Wordpress seguro en Ubuntu Server
 

Último

Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
NajwaNimri1
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
AMADO SALVADOR
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
mantenimientocarbra6
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
JuanaNT7
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
AMADO SALVADOR
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
KukiiSanchez
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
tamarita881
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
AMADO SALVADOR
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
bendezuperezjimena
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
Miguel Rebollo
 

Último (20)

Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
SISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsxSISTESIS RETO4 Grupo4 co-creadores .ppsx
SISTESIS RETO4 Grupo4 co-creadores .ppsx
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
IA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticulturaIA en entornos rurales aplicada a la viticultura
IA en entornos rurales aplicada a la viticultura
 

Eliminando SQL injection

  • 1. Eliminando SQL injection Stuardo -StR- Rodríguez Web developer La Maphpia srodriguez@maphpia.com OWASP 19/08/2011 Copyright © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP Foundation
  • 2. ¿Quién soy? Stuardo Rodríguez Promotor del software libre desde 1998 Desarollador web en PHP desde 2000 Fundador comunidad PHPGT  /in/stuardo  http://www.google.com/profiles/stuardo.str Actualmente trabajando para La Maphpia OWASP 2
  • 3. Eliminando SQL injection Agenda 3 categorías de posible inseguridad ¿Qué es SQL injection? Como solucionar problemas de SQL injection Como ELIMINAR problemas de SQL injection Ir un paso mas allá. OWASP 3
  • 4. 3 categorías de posible inseguridad Datos de entrada Datos de salida Entorno entrada sistema salida OWASP 4
  • 5. 3 categorías de posible inseguridad Datos de entrada Datos de salida Entorno entrada sistema salida OWASP 5
  • 6. ¿Qué es SQL injection? $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = “INSERT INTO users (username, password, email) VALUES ( '{$_POST['username']}', '{$_POST['pass']}', '{$_POST['email']}' )”; INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 6
  • 7. ¿Qué es SQL injection? $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = “INSERT INTO users (username, password, email) VALUES ( '{$_POST['username']}', '{$_POST['pass']}', '{$_POST['email']}' )”; INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 7
  • 8. ¿Qué es SQL injection? $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = “INSERT INTO users (username, password, email) VALUES ( '{$_POST['username']}', '{$_POST['pass']}', '{$_POST['email']}' )”; INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 8
  • 9. ¿Qué es SQL injection? $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = “INSERT INTO users (username, password, email) VALUES ( '{$_POST['username']}', '{$_POST['pass']}', '{$_POST['email']}' )”; INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 9
  • 10. Como solucionar problemas de SQL injection Método automático magic_quotes  Existe desde PHP2  Creado para “ayudar” a programadores novatos a escribir código “seguro”  Escapeaba con cualquier ',”, o caracter NULL. OWASP 10
  • 11. Como solucionar problemas de SQL injection Método automático magic_quotes  No todos los datos de entrada son para ser insertados en SQL.  No todos los datos a ser insertados vienen en un campo del formulario.  magic_quotes usa addslashes() que no es seguro para escapar texto unicode.  No todas las bases de datos usan para escapear ' OWASP 11
  • 12. Como solucionar problemas de SQL injection Método automático magic_quotes  No todos los datos de entrada son para ser insertados en SQL.  No todos los datos a ser insertados vienen en un campo del formulario.  magic_quotes usa addslashes() que no es seguro para escapar texto unicode.  No todas las bases de datos usan para escapear '  GENERA IGNORANCIA! OWASP 12
  • 13. Como solucionar problemas de SQL injection Método automático filter_input() filter_var() filter_input_array() filter_var_array() OWASP 13
  • 14. Como solucionar problemas de SQL injection Método automático filter_input() filter_var() filter_input_array() filter_var_array() SIGEN GENERANDO IGNORANCIA! OWASP 14
  • 15. Como solucionar problemas de SQL injection Método manual if (strpos($_POST['email'], ';')) throw new Exception('Invalid input'); if (strpos($_POST['email'], ''')) throw new Exception('Invalid input'); if (strpos($_POST['email'], '”')) throw new Exception('Invalid input'); if (preg_match('/from|select|delete|insert| where|drop|show|#|--|/ui',$_POST['email'])) throw new Exception('Invalid input'); OWASP 15
  • 16. Como solucionar problemas de SQL injection Método manual mysql_escape_string() mysql_real_escape_string() OWASP 16
  • 17. Como solucionar problemas de SQL injection $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = “INSERT INTO users (username, password, email) VALUES ( '{$_POST['username']}', '{$_POST['pass']}', '{$_POST['email']}' )”; INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 17
  • 18. Como solucionar problemas de SQL injection $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = sprintf(“INSERT INTO users (username, password, email) VALUES ('%s', '%s', '%s')”, mysql_real_escape_string ($_POST['username']), mysql_real_escape_string ($_POST['pass']), mysql_real_escape_string ($_POST['email']) )”; INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 18
  • 19. Como ELIMINAR problemas de SQL injection PDO ... OWASP 19
  • 20. Como ELIMINAR problemas de SQL injection $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = sprintf(“INSERT INTO users (username, password, email) VALUES ('%s', '%s', '%s')”, mysql_real_escape_string ($_POST['username']), mysql_real_escape_string ($_POST['pass']), mysql_real_escape_string ($_POST['email']) )”; INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 20
  • 21. Como ELIMINAR problemas de SQL injection $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = $db->prepare('INSERT INTO users (username, password, email) VALUES (:username, :pass, :email)'); $sql->exec($_POST); INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 21
  • 22. Como ELIMINAR problemas de SQL injection $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = $db->prepare('INSERT INTO users (username, password, email) VALUES (:username, :pass, :email)'); $sql->exec($_POST); INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 22
  • 23. Como ELIMINAR problemas de SQL injection PDO Módulo PECL para PHP 5.0 Nace de DB y MDB de PEAR Por default en PHP 5.1 OWASP 23
  • 24. Como ELIMINAR problemas de SQL injection $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $db = new PDO('mysql:host=localhost; dbname=example', $user, $password); $sql = $db->prepare('INSERT INTO users (username, password, email) VALUES (:username, :pass, :email)'); $sql->exec ($_POST); OWASP 24
  • 25. Ir un paso mas allá. PDO es una capa de abstracción de acceso a datos Usar una capa de abstracción de datos Doctrine OWASP 25
  • 26. Ir un paso mas allá. $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $sql = $db->prepare('INSERT INTO users (username, password, email) VALUES (:username, :pass, :email)'); $sql->exec($_POST); INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 26
  • 27. Ir un paso mas allá. $_POST['email'] = “foo@bar.com'); DROP TABLE users; -- ”; $user = new User(); $user->insert($_POST); INSERT INTO USERS (username, password, email) VALUES ('str', 'password', 'foo@bar.com'); DROP TABLE users; -- '); OWASP 27
  • 28. Eliminando SQL injection GRACIAS Stuardo -StR- Rodríguez srodriguez@maphpia.com  /in/stuardo  http://www.google.com/profiles/stuardo.str OWASP 28