2014-07-12 9 views
8

Se uso MySQLi istruzioni preparate come di seguito:Devo sfuggire alle mie variabili se utilizzo istruzioni preparate MySQLi?

$stmt = $con1->prepare("UPDATE Login SET Session='LoggedOut' where Session=?"); 
$stmt->bind_param('s',$Session); 
$stmt->execute(); 
$stmt->close(); 

Ho ancora bisogno di fuggire mio variabili come $Session con mysqli_real_escape_string(); come di seguito:

$Session = mysqli_real_escape_string($con1, $_COOKIE['Session']); 
$stmt = $con1->prepare("UPDATE Login SET Session='LoggedOut' where Session=?"); 
$stmt->bind_param('s',$Session); 
$stmt->execute(); 
$stmt->close(); 
+4

No ............. – aldanux

+1

No, ecco perché si utilizzano le istruzioni preparate – JiFus

+1

Come nota a margine, avere una variabile denominata '$ Session' potrebbe rivelarsi fonte di confusione per te o per altri in futuro . – Boaz

risposta

6

No, se si utilizza istruzioni preparate ovunque nella vostra applicazione sicura dall'iniezione SQL. Tuttavia, un importante "trucchetto" è un attacco di iniezione del 2 ° ordine che si verifica quando alcune query utilizzano istruzioni preparate e altre no.

Secondo this risposta di una domanda simile su SO:

istruzioni preparate/query con parametri sono sufficienti ad evitare prima iniezione ordine su questa affermazione. Se si utilizza sql dinamico non controllato in qualsiasi altro punto dell'applicazione, si è ancora vulnerabili all'iniezione del secondo ordine.

In sintesi, le istruzioni preparate creano una separazione tra i dati inviati e la query SQL stessa, garantendo che i dati non possano essere interpretati erroneamente come la query SQL. Tuttavia, un utente malintenzionato può comunque immettere SQL come dati e, sebbene non venga eseguito quando viene memorizzato per la prima volta se si utilizzano istruzioni preparate, è comunque necessario prestare attenzione quando si recuperano detti risultati. Le istruzioni preparate proteggono l'applicazione in quel particolare punto, ma poiché SQL è ancora permesso di essere memorizzato nel database, l'applicazione non è sicura se in seguito si utilizzano quei dati senza parametrizzazione.

3

No, non è così.

Questa è l'unica risposta che ti serve.

Tutte le conversazioni confuse nell'altra risposta sono irrilevanti. Il tizio sta cercando di dirti che se sei abbastanza sciocco da non usare dichiarazioni preparate dappertutto, allora sei in pericolo. Il che è abbastanza ovvio e irrilevante per una dichiarazione preparata.