Eliminando SQL injection                    Stuardo -StR- Rodríguez                    Web developer                    La...
¿Quién soy?Stuardo Rodríguez  Promotor del software libre desde 1998  Desarollador web en PHP desde 2000  Fundador com...
Eliminando SQL injectionAgenda  3 categorías de posible inseguridad  ¿Qué es SQL injection?  Como solucionar problemas...
3 categorías de posible inseguridadDatos de entradaDatos de salidaEntorno    entrada         sistema    salida         ...
3 categorías de posible inseguridadDatos de entradaDatos de salidaEntorno    entrada         sistema    salida         ...
¿Qué es SQL injection?$_POST[email] = “foo@bar.com);    DROP TABLE users;    -- ”;$sql = “INSERT INTO users (username, pas...
¿Qué es SQL injection?$_POST[email] = “foo@bar.com);    DROP TABLE users;    -- ”;$sql = “INSERT INTO users (username, pas...
¿Qué es SQL injection?$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$sql = “INSERT INTO users (username, p...
¿Qué es SQL injection?$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$sql = “INSERT INTO users (username, p...
Como solucionarproblemas de SQL injectionMétodo automático  magic_quotes     Existe desde PHP2     Creado para “ayudar...
Como solucionarproblemas de SQL injectionMétodo automático  magic_quotes     No todos los datos de entrada son para ser...
Como solucionarproblemas de SQL injectionMétodo automático  magic_quotes     No todos los datos de entrada son para ser...
Como solucionarproblemas de SQL injectionMétodo automático  filter_input()  filter_var()  filter_input_array()  filte...
Como solucionarproblemas de SQL injectionMétodo automático  filter_input()  filter_var()  filter_input_array()  filte...
Como solucionarproblemas de SQL injectionMétodo manualif (strpos($_POST[email], ;))    throw new Exception(Invalid input)...
Como solucionarproblemas de SQL injectionMétodo manual  mysql_escape_string()  mysql_real_escape_string()              ...
Como solucionarproblemas de SQL injection$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$sql = “INSERT INTO...
Como solucionarproblemas de SQL injection$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$sql = sprintf(“INS...
Como ELIMINARproblemas de SQL injectionPDO  ...                             OWASP   19
Como ELIMINARproblemas de SQL injection$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$sql = sprintf(“INSER...
Como ELIMINARproblemas de SQL injection$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$sql = $db->prepare(I...
Como ELIMINARproblemas de SQL injection$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$sql = $db->prepare(I...
Como ELIMINARproblemas de SQL injectionPDO  Módulo PECL para PHP 5.0  Nace de DB y MDB de PEAR  Por default en PHP 5.1...
Como ELIMINARproblemas de SQL injection$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$db = new PDO(mysql:h...
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    ...
Ir un paso mas allá.$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$sql = $db->prepare(INSERT INTO users   ...
Ir un paso mas allá.$_POST[email] = “foo@bar.com);     DROP TABLE users;     -- ”;$user = new User();$user->insert($_POST)...
Eliminando SQL injectionGRACIAS  Stuardo -StR- Rodríguez  srodriguez@maphpia.com     /in/stuardo     http://www.google...
Upcoming SlideShare
Loading in...5
×

Eliminando SQL injection

2,875

Published on

Conferencia que di para OWASP Guatemala sobre SQL injection en PHP y como eliminar ese problema de seguridad el cual es el número uno del Top10 según OWASP.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,875
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
91
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Eliminando SQL injection

  1. 1. Eliminando SQL injection Stuardo -StR- Rodríguez Web developer La Maphpia srodriguez@maphpia.comOWASP19/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. 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. 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. 4. 3 categorías de posible inseguridadDatos de entradaDatos de salidaEntorno entrada sistema salida OWASP 4
  5. 5. 3 categorías de posible inseguridadDatos de entradaDatos de salidaEntorno entrada sistema salida OWASP 5
  6. 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. 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. 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. 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. 10. Como solucionarproblemas 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. 11. Como solucionarproblemas 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. 12. Como solucionarproblemas 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. 13. Como solucionarproblemas de SQL injectionMétodo automático filter_input() filter_var() filter_input_array() filter_var_array() OWASP 13
  14. 14. Como solucionarproblemas de SQL injectionMétodo automático filter_input() filter_var() filter_input_array() filter_var_array() SIGEN GENERANDO IGNORANCIA! OWASP 14
  15. 15. Como solucionarproblemas de SQL injectionMétodo manualif (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. 16. Como solucionarproblemas de SQL injectionMétodo manual mysql_escape_string() mysql_real_escape_string() OWASP 16
  17. 17. Como solucionarproblemas 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. 18. Como solucionarproblemas 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. 19. Como ELIMINARproblemas de SQL injectionPDO ... OWASP 19
  20. 20. Como ELIMINARproblemas 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. 21. Como ELIMINARproblemas 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. 22. Como ELIMINARproblemas 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. 23. Como ELIMINARproblemas 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. 24. Como ELIMINARproblemas 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. 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. 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. 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. 28. Eliminando SQL injectionGRACIAS Stuardo -StR- Rodríguez srodriguez@maphpia.com  /in/stuardo  http://www.google.com/profiles/stuardo.str OWASP 28
  1. ¿Le ha llamado la atención una diapositiva en particular?

    Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

×