SQL Injection

Introducció

SQL Injection és un tècnica que hacking que permet injectar instruccions SQL a través d'una pàgina de la nostra aplicació web.

Exemple SQL injection

Si tenim, per exemple, un formulari de login:

<?php
// sql to select a record
$user = $_GET["user"];
$pass = $_GET["password"];
$sql = "SELECT * FROM users WHERE username='$user' AND password='$pass'";
$result = $conn->query($sql);

if ($result){
    echo "Usuari autenticat!"
}

I un perillós hacker omple un formulari amb aquestes dades:

Exemple 1 SQL Injection

Si introdueix ' OR 1=1 -- en el camp user.

<?php
    $user = "' OR 1=1 --"
    $pass = ""
    $sql = "SELECT * FROM users WHERE username='$user' AND password='$pass'";
?>

El -- en MySQL indica que és un comentari .

La consulta que s'executarà serà:

SELECT * FROM users WHERE username='' OR 1=1 --' AND password=''

Com interpreta això la base de dades? Primer de tot busca un nom amb una cadena buida, no troba cap i per tant és fals. A continuació mira la segona condició ( 1 = 1) i evidentment és certa. Com l'operador or funciona que si una de les condicions és certa el resultat és cert.

SELECT * FROM users WHERE true

Amb la qual cosa ens retornarà tots els usuaris!!

I el perillós hacker podrà autenticar-se a l'aplicació!!!

Exemple 2 SQL Injection

Si introdueix ' OR 1=1 en el camp password.

<?php
    $user = "sergi"
    $pass = "' OR 1=1"
    $sql = "SELECT * FROM users WHERE username='$user' AND password='$pass'";
?>

La consulta que s'executarà serà:

SELECT * FROM users WHERE username='sergi' AND password='' OR 1=1;

I podrà autenticar-se a l'aplicació!!!

Exemple 3 SQL Injection

Si introdueix '; DROP TABLE users -- en el camp user.

<?php
    $user = "'; DROP TABLE users --"
    $pass = ""
    $sql = "SELECT * FROM users WHERE username='$user' AND password='$pass'";
?>

La consulta que s'executarà serà:

SELECT * FROM users WHERE username=''; DROP TABLE users --' AND password=''

I s'eliminarà tota la taula users!!!

Per tant, evitarem sempre utilitzar els mètodes query o exec i al seu lloc utilitzarem els Prepared Statements.

#FpInfor #DawMp07Uf01 #DawMp07Uf02 #DawMp07Uf03 #PHP

#FpInfor #AsixMp09Uf01 #PHP

Autor: Sergi Coll

Modificat: 18/12/2018

results matching ""

    No results matching ""