[Php-it] SQL Inject [Esteso...]

Gianluca Baù gianluca at ihuri.it
Fri Dec 29 11:48:38 CET 2006


>  Luca 'Ziabice' Gambetta ha scritto:
>
>>>Emiliano Gabrielli (aka AlberT) ha scritto:
>>>    
>>>
>>>>> (ad esempio un intero) e se non contienre caratteri non
>>>>>consentiti 
>>>>>        
>>>>>
>>>>questo è un approccio a Black List ... intrinsecamente fallace...
>>>>    
>>>>      
>>>>
>>>Perche' fallace ?
>>>
>>>M.
>>>
>>>    
>>>
>>
>>Perché è meglio dire cosa debba entrare chiaro e tondo, che cosa non
>>debba entrare,
>>
>
> Ok, anche perche' io faccio la stessa cosa :)  Solo che l'ho detta al 
> contrario :) Che deficiente... [controllo che un dato passato come 
> tipo numero contenga solo 0-9 (ad esempio) e non che NON contenga 
> caratteri.]
>
> C'e' una vecchia email passata in ML che contiene un po' di regex. Non 
> mi ricordo di chi, ma io uso una cosa simile. Se non identica.


Ma una volta che l'input è sbagliato che fate?
Questo è un discorso generale che mi piacerebbe affrontare.

Io solitamente uso questa logica:

File Form
|
|
File di azione (visibile nell'action="...")
|
|
Errore

<code>
if ( empty($_POST['nome']) )
    $errore = "0x001";
</code>

|
|
Back to File Form tramite header("Location: ") con in get un codice di 
errore

<code>
header ("Location: http://url_to_file_form?errore=" . $errore);
exit();
</code>

Nel file form è presente un array con i vari codici di errore (es: 00x1, 
00x2) e le relative stringhe che vengono stampate

<code>
$array_errori (
    "0x001" => "Specificare il nome",
    "0x002" => "Specificare il cognome"
);

if ( array_key_exists($_GET['errore'], $array_errori) )
    echo $array_errori[$_GET['errore']];
else
    die("What are you doing?");
</code>

Questo ovviamente non nel caso ajax :)

Che ne pensate? Secondo me è semplice, efficace... un po' anche sicuro 
ma nn mi lascia del tutto soddisfatto.

Saluti

Gianluca


More information about the Php-it mailing list