2010-01-23 7 views
5

Devo usare la funzione mysql_real_escape_string() nelle mie query MySQL per le variabili $_SESSION? Teoricamente, le variabili $_SESSION non possono essere modificate dall'utente finale a differenza delle variabili $_GET o $_POST, giusto?

Grazie :)

risposta

4

Indipendentemente dal fatto che l'utente può modificare i dati, probabilmente avrete bisogno di fuggire in ogni modo nel caso in cui fosse necessario i dati per contenere caratteri che rompere l'SQL (citazioni, ecc).

Ancora meglio, usa i parametri associati e non dovrai preoccuparti di questo.

+0

Grazie Andrew. Posso chiedere quali sono i "parametri associati"? – Lyon

+0

È un modo per dichiarare i segnaposto nel proprio SQL e quindi inviare i valori dei dati al server "fuori banda" in modo che non possano essere interpretati come SQL, eliminando la possibilità di SQL injection. Vedi, ad esempio: http://usphp.com/manual/en/function.mysqli-stmt-bind-param.php –

+0

Hmm..Vedo. Dopo il tuo testa a testa, ho iniziato a leggere i param di bind e il suo supporto in mysqli. Attualmente sto usando ext/mysql e credo che non supporti i parametri di binding. Grazie mille. Dovrò rispondere alle mie domande sulla migrazione da mysql a mysqli su un altro thread (come usare mysqli senza istruzioni preparate). – Lyon

4

Non sfuggire/citare/codificare il testo finché non si è nel punto in cui è necessario. Le rappresentazioni interne dovrebbero essere il più "crudo" possibile.

+0

+1, esattamente quello che stavo pensando. – Inshallah

3

È possibile rispondere alla domanda se stessi seguendo questa linea di ragionamento:

Ha fatto il valore di $ _SESSION provengono da input dell'utente?

Se è così, è già stato disinfettato?

+0

Sì, sì. Questo è il motivo per cui mi chiedevo se fosse necessario eseguire nuovamente l'escape prima di usarlo in una dichiarazione sql. – Lyon

+0

Quindi non lo sfuggire di nuovo, sarebbe meglio inserirlo nel db con il minimo di elaborazione possibile –

+0

La mia opinione su di esso: se si genera il tuo SQL in modo dinamico, concatenando i dati in esso, l'igienizzazione e la concatenazione dovrebbero essere fatto nello stesso posto. Dovrebbe essere ovvio che stai costruendo l'SQL correttamente e disinfetti tutto correttamente, semplicemente osservando il codice di concatenazione. – Inshallah

1

In teoria, le variabili $ _SESSION non possono essere modificate con l'utente finale

No, ma i dati deve provenire da qualche parte.

Si dovrebbe sfuggire a qualsiasi output da PHP, utilizzando il metodo appropriato per la destinazione nel punto in cui lascia PHP.

C.

+0

Grazie symbbean :) Suppongo che "lasciare PHP" implichi o mysql o scrivere in un file? Ho usato htmlspecialchars ma ora uso esclusivamente filter_var e mysql_real_escape_string per elaborare qualsiasi input dagli utenti. – Lyon

+0

Chiarimento: per elaborare l'input dagli utenti per l'uso in mysql, prima disinfetto l'input, quindi uso mysql_real_escape_string. Quindi htmlentities (al contrario di htmlspecialchars) verranno utilizzati quando sto trasmettendo i dati per la visualizzazione nel browser del client. – Lyon