Your SlideShare is downloading. ×
  • Like
Eliminando SQL injection
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Eliminando SQL injection

  • 2,641 views
Published

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.

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,641
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
86
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

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