Mecanismos de protección contra inyección sql

11

description

 

Transcript of Mecanismos de protección contra inyección sql

Page 1: Mecanismos de protección contra inyección sql
Page 2: Mecanismos de protección contra inyección sql

Es un método de infiltración de código intruso

que se vale de una vulnerabilidad informática presente en una aplicación en el nivel de validación de las entradas para realizar consultas a una base de datos.

INYECCION SQL

Page 3: Mecanismos de protección contra inyección sql

<?php $user = $GET['login']; $pass = $GET['password'];

$query = "SELECT * FROM users WHERE username='" . $user . "'and userpass='" . $pass . "'";

$conexionpg_connect("dbname=webapp user=usuario");$result = pg_query($conexion, $consulta);if($result) {$rows = pg_num_rows($result);if($rows == 0) {?><h1><?php echo "Acceso denegado";?></h1><?php}else{?><h1><?php echo "Bienvenido" . $user;?></h1> <?php} }?>}?>

Page 4: Mecanismos de protección contra inyección sql

login

password

SELECT * FROM users WHERE username='.$user.'and userpass='.$pass';

Page 5: Mecanismos de protección contra inyección sql

login

password itcuautla

martha

Si en los campos user y pass de nuestra aplicación ponemos:username =marthauserpass = itcuautlala consulta quedaría:

SELECT * FROM users WHERE username=‘martha‘ and userpass=‘itcuautla';

Page 6: Mecanismos de protección contra inyección sql

login

password  ‘OR”=’

 ‘OR”=’

SELECT * FROM users WHERE username='' OR ''=''and userpass='' OR ''='';

Page 7: Mecanismos de protección contra inyección sql

login

password  ‘;DROP TABLE users;–

loquesea

SELECT * FROM users WHERE username='loquesea' and userpass='';DROP TABLE users;--';

Page 8: Mecanismos de protección contra inyección sql

Ocurre por que no filtramos o escapamos los

carácteres que forman la sintaxis de sql, no se filtran las comillas simples (‘), el punto y coma(;), los iguales (=) ni los guiones (-).

¿Por qué ocurre esto?

Page 9: Mecanismos de protección contra inyección sql

Aplicar validación (lo más estricta posible) a

los datos. Que no se pueda ejecutar más de una

sentencia SQL en el mismo comando. Restringir los tipos de dato aceptados. Utilizar funciones ya preparadas para realizar

el trabajo con la BD. Escapar el caracter (‘).

Solución

Page 10: Mecanismos de protección contra inyección sql

<?php $user = $GET['login']; $pass = $GET['password'];if(ereg("^[0-9A-Za-z]+$",$user)) && (ereg("^[0-9A-Za-z]+$",$pass)) {$query = "SELECT * FROM users WHERE

username='".pg_escape_string($user)."'and userpass='".pg_escape_string($pass)."'“ $conexion = pg_connect("dbname=webapp user=usuario");

$result = pg_query($conexion, $consulta);if($result) {

$rows = pg_num_rows($result);if($rows == 0) {?&>

<h1><?php echo "Acceso denegado";?></h1><?php}else{?>

<h1><?php echo "Bienvenido".$user;?></h1><?php}} }?>

Page 11: Mecanismos de protección contra inyección sql

<?php $user = $GET['login'];$pass = $GET['password'];

if(ereg("^[0-9A-Za-z]+$",$user)) && (ereg("^[0-9A-Za-z]+$",$pass)) {$conexion = pg_connect("dbname=webapp user=usuario");$result = pg_prepare($conexion, "", 'SELECT * FROM users WHERE username =$1 and userpass=$2');$resultexec = pg_execute($conexion, "", array($user,$pass));if($resultexec) {$rows = pg_num_rows($resultexec);if($rows == 0) {?&><h1><?php echo "Acceso denegado";?></h1><?php}else{?><h1><?php echo "Bienvenido".$user;?></h1><?php}

}}?>