Eliminando SQL injection
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Eliminando SQL injection

on

  • 2,927 views

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.

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.

Statistics

Views

Total Views
2,927
Views on SlideShare
2,901
Embed Views
26

Actions

Likes
0
Downloads
84
Comments
0

6 Embeds 26

http://localhost 20
http://twitter.com 2
http://us-w1.rockmelt.com 1
https://twitter.com 1
http://www.linkedin.com 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Eliminando SQL injection Presentation Transcript

  • 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. ¿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 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. 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. 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. Como solucionarproblemas de SQL injectionMétodo automático filter_input() filter_var() filter_input_array() filter_var_array() OWASP 13
  • 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. 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. Como solucionarproblemas de SQL injectionMétodo manual mysql_escape_string() mysql_real_escape_string() OWASP 16
  • 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. 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. Como ELIMINARproblemas de SQL injectionPDO ... OWASP 19
  • 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. 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. 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. 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. 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. 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 injectionGRACIAS Stuardo -StR- Rodríguez srodriguez@maphpia.com  /in/stuardo  http://www.google.com/profiles/stuardo.str OWASP 28