<ul><li>Es un método de infiltración de código intruso que se vale de una vulnerabilidad informática presente en una aplic...
<ul><li><?php $user = $GET['login']; $pass = $GET['password']; </li></ul><ul><li>$query = &quot;SELECT * FROM users WHERE ...
login password SELECT * FROM users WHERE username='.$user.'and userpass='.$pass';
login password itcuautla martha Si en los campos user y pass de nuestra aplicación ponemos: username =martha userpass = it...
login password  ‘ OR”=’  ‘ OR”=’ SELECT * FROM users WHERE username='' OR ''=''and userpass='' OR ''='';
login password  ‘ ;DROP TABLE users;– loquesea SELECT * FROM users WHERE username='loquesea' and userpass='';DROP TABLE us...
<ul><li>Ocurre por que no filtramos o escapamos los carácteres que forman la sintaxis de sql, no se filtran las comillas s...
<ul><li>Aplicar validación (lo más estricta posible) a los datos. </li></ul><ul><li>Que no se pueda ejecutar más de una se...
<ul><li><?php $user = $GET['login']; $pass = $GET['password']; </li></ul><ul><li>if(ereg(&quot;^[0-9A-Za-z]+$&quot;,$user)...
<ul><li><?php $user = $GET['login']; </li></ul><ul><li>$pass = $GET['password']; </li></ul><ul><li>if(ereg(&quot;^[0-9A-Za...
Upcoming SlideShare
Loading in …5
×

Mecanismos de protección contra inyección sql

3,154 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
3,154
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
103
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Mecanismos de protección contra inyección sql

  1. 2. <ul><li>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. </li></ul>INYECCION SQL
  2. 3. <ul><li><?php $user = $GET['login']; $pass = $GET['password']; </li></ul><ul><li>$query = &quot;SELECT * FROM users WHERE username='&quot; . $user . &quot;'and userpass='&quot; . $pass . &quot;'&quot;; </li></ul><ul><li>$conexionpg_connect(&quot;dbname=webapp user=usuario&quot;); </li></ul><ul><li>$result = pg_query($conexion, $consulta); </li></ul><ul><li>if($result) { </li></ul><ul><li>$rows = pg_num_rows($result); </li></ul><ul><li>if($rows == 0) </li></ul><ul><li>{?> </li></ul><ul><li><h1><?php echo &quot;Acceso denegado&quot;;?></h1> </li></ul><ul><li><?php}else{?> </li></ul><ul><li><h1><?php echo &quot;Bienvenido&quot; . $user;?></h1> </li></ul><ul><li><?php} }?>}?> </li></ul>
  3. 4. login password SELECT * FROM users WHERE username='.$user.'and userpass='.$pass';
  4. 5. login password itcuautla martha Si en los campos user y pass de nuestra aplicación ponemos: username =martha userpass = itcuautla la consulta quedaría: SELECT * FROM users WHERE username=‘martha‘ and userpass=‘itcuautla';
  5. 6. login password  ‘ OR”=’  ‘ OR”=’ SELECT * FROM users WHERE username='' OR ''=''and userpass='' OR ''='';
  6. 7. login password  ‘ ;DROP TABLE users;– loquesea SELECT * FROM users WHERE username='loquesea' and userpass='';DROP TABLE users;--';
  7. 8. <ul><li>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 (-). </li></ul>¿Por qué ocurre esto?
  8. 9. <ul><li>Aplicar validación (lo más estricta posible) a los datos. </li></ul><ul><li>Que no se pueda ejecutar más de una sentencia SQL en el mismo comando. </li></ul><ul><li>Restringir los tipos de dato aceptados. </li></ul><ul><li>Utilizar funciones ya preparadas para realizar el trabajo con la BD. </li></ul><ul><li>Escapar el caracter (‘). </li></ul>Solución
  9. 10. <ul><li><?php $user = $GET['login']; $pass = $GET['password']; </li></ul><ul><li>if(ereg(&quot;^[0-9A-Za-z]+$&quot;,$user)) && (ereg(&quot;^[0-9A-Za-z]+$&quot;,$pass)) { </li></ul><ul><li>$query = &quot;SELECT * FROM users WHERE </li></ul><ul><li>username='&quot;.pg_escape_string($user).&quot;'and </li></ul><ul><li>userpass='&quot;.pg_escape_string($pass).&quot;'“ </li></ul><ul><li>$conexion = pg_connect(&quot;dbname=webapp user=usuario&quot;); </li></ul><ul><li>$result = pg_query($conexion, $consulta); </li></ul><ul><li>if($result) { </li></ul><ul><li>$rows = pg_num_rows($result); </li></ul><ul><li>if($rows == 0) {?&> </li></ul><ul><li><h1><?php echo &quot;Acceso denegado&quot;;?></h1><?php} </li></ul><ul><li>else{?> </li></ul><ul><li><h1><?php echo &quot;Bienvenido&quot;.$user;?></h1><?php}} }?> </li></ul>
  10. 11. <ul><li><?php $user = $GET['login']; </li></ul><ul><li>$pass = $GET['password']; </li></ul><ul><li>if(ereg(&quot;^[0-9A-Za-z]+$&quot;,$user)) && (ereg(&quot;^[0-9A-Za-z]+$&quot;,$pass)) { </li></ul><ul><li>$conexion = pg_connect(&quot;dbname=webapp user=usuario&quot;); </li></ul><ul><li>$result = pg_prepare($conexion, &quot;&quot;, 'SELECT * FROM users WHERE </li></ul><ul><li>username =$1 and userpass=$2'); </li></ul><ul><li>$resultexec = pg_execute($conexion, &quot;&quot;, array($user,$pass)); </li></ul><ul><li>if($resultexec) { </li></ul><ul><li>$rows = pg_num_rows($resultexec); </li></ul><ul><li>if($rows == 0) {?&> </li></ul><ul><li><h1><?php echo &quot;Acceso denegado&quot;;?></h1> </li></ul><ul><li><?php}else{?> </li></ul><ul><li><h1><?php echo &quot;Bienvenido&quot;.$user;?></h1><?php} </li></ul><ul><li>} </li></ul><ul><li>}?> </li></ul>

×