{PHP} SQL Injection [duplicato]

-3

Nota: questo non è un duplicato !!! Perché? Puoi usare 'ma non sai come:)

Ho questo codice PHP:

<?php
(...)

function escape($str) {
$ret = '';
for($i=0;@$str[$i];$i++)
{
    if($str[$i]!='\'')
    if($str[$i]!='\')
    if($str[$i]!='"')
    if($str[$i]!="\r")
    if($str[$i]!="\n")
    if($str[$i]!="\x1a")
    {
        $ret .= $str[$i];
        continue;
    }
    $ret .= '?';
}
return $ret;
}

$pass = escape($_POST['password']);

$query = "select 1 from user_pwd where pass='{$pass}'";
$query = mysql_query($query);
$array = mysql_fetch_array($query);
var_dump($array);
?>

So che non è sicuro (conosco SQL Injection, posso fare mysql_real_escape_string o add_slashes, ma voglio solo sapere cosa c'è che non va:).

EDIT: puoi usare '. Se si invia un array nei dati POST: password [0] = 1 & password [1] = 'union select' 1 Farai SQL Injection ^^

    
posta Szymon Marczak 04.08.2015 - 16:03
fonte

1 risposta

2

Innanzitutto, come hai già osservato, è aperto all'iniezione SQL. L'iniezione SQL non è limitata a cose che iniziano con "-" o "//"; è limitato solo dalla creatività dell'attaccante.
Utilizza query parametrizzate. Sempre.

In secondo luogo, dovresti cancellare la password. Le funzioni built-in di PHP ti forniscono sistemi che eseguono automaticamente l'hash e forniscono una soluzione salina, quindi non hai scuse.

Lo scopo del filtro è spesso prevenire gli attacchi XSS, ma questi si verificano quando si mostrano dati inseriti da un utente (l'autore dell'attacco) a un altro utente. Spero davvero che tu non abbia intenzione di mostrare le password delle persone ai visitatori casuali ...

    
risposta data 04.08.2015 - 16:12
fonte

Leggi altre domande sui tag