Come fa SqlCommand disinfettare i parametri?
-
06-09-2019 - |
Domanda
Utilizzando SqlParameters
è un metodo consigliato per prevenire SQL Injection nelle query di database. Dove posso trovare il codice / funzione che disinfetta internamente questi parametri? Mi piacerebbe ri-utilizzare per questa funzione in un'implementazione personalizzata di mine. Ho cercato di trovare utilizzando Reflector, ma senza successo.
Soluzione
Protegge contro SQL Injection, non XSS, e non esiste un codice o la funzione che disinfetta i dati dei parametri.
La protezione si ottiene trasmettendo i valori dei parametri al server separatamente dalla stringa di query, in modo che i valori sono non sostituito direttamente nella dichiarazione di sql.
Così, invece di sql server in esecuzione qualcosa di simile:
SELECT * FROM [table] WHERE [column] = ParameterValue
E 'più come se correva qualcosa di simile:
DECLARE @ParamValue int
-- //@ParamValue variable is populated from the framework in a safe way
SELECT * FROM [table] WHERE [column] = @ParamValue
Questo è più veloce e molto più sicuro e robusto di una funzione che avrebbe dovuto valutare i dati dei parametri. Tale funzione avrebbe bisogno di essere molto complesso (leggi: soggetto a errori) per gestire le cose come caratteri di escape personalizzato e miglioramenti futuri.
Questa ordinatamente lato passi l'intera questione: i dati sono dati, il codice è il codice, e mai i due si incontreranno
.Il tuo commento all'altro, ora cancellato, risposta:
Se mi passa nel valore O'Rourke, esso codifica che sia O''Rourke in modo che non si rompe la query. Corretta?
No, questo non è corretto. La variabile viene creato direttamente da un blocco di dati, e quindi è necessaria scampo speciale o codifica.