• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Eliminando SQL injection
 

Eliminando SQL injection

on

  • 2,747 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,747
Views on SlideShare
2,722
Embed Views
25

Actions

Likes
0
Downloads
81
Comments
0

5 Embeds 25

http://localhost 20
http://twitter.com 2
http://us-w1.rockmelt.com 1
https://twitter.com 1
http://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 Eliminando SQL injection Presentation Transcript

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