L'utilizzo di SqlParameters
è un metodo consigliato per impedire l'SQL Injection nelle query del database. Dove posso trovare il codice/funzione che sanifica internamente questi parametri? Mi piacerebbe riutilizzare questa funzione in una mia implementazione personalizzata. Ho provato a trovarlo usando Reflector, ma non ho avuto successo.In che modo SqlCommand disinfetta i parametri?
risposta
Protegge contro SQL Injection, non XSS e non esiste alcun codice o funzione che sanifica i dati dei parametri.
La protezione viene eseguita trasmettendo i valori dei parametri al server separatamente dalla stringa di query, in modo che i valori siano mai sostituiti direttamente nell'istruzione sql.
Così, invece di sql server in esecuzione o meno così:
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 questo dovrebbe valutare i dati dei parametri. Tale funzione dovrebbe essere molto complessa (leggi: soggetto a errori) per gestire cose come custom escape characters e miglioramenti futuri.
Questo lato preciso fa il punto sull'intero problema: i dati sono dati, il codice è codice e mai i due devono incontrarsi.
Il tuo commento all'altro, ora cancellato, risposta:
Se mi passa nel valore O'Rourke, che codifica per essere O''Rourke in modo che non si rompe la query. Corretta?
No, non è corretto. La variabile viene creata direttamente da un blocco di dati, quindi non è necessaria alcuna escaping o codifica speciale.
OK, ha senso, grazie. "// @ La variabile ParamValue viene popolata dal framework in modo sicuro" come viene popolato in un modo sicuro allora? –
Non è sql - la variabile viene creata da sql server dal blocco _data_ trasmesso dal client, ma è conservata in un segmento di dati e mai trattata come codice, quindi i dati non devono essere sottoposti a escape o codificati. –
Conosci qualche letteratura dettagliata riguardo a questo? Mi piacerebbe davvero capire l'intero processo. –
- 1. SqlCommand eccezione dei parametri massimi ai parametri 2099
- 2. Riutilizzare SqlCommand?
- 3. C# SqlCommand - non è possibile utilizzare i parametri per i nomi delle colonne, come risolvere?
- 4. Come convalidare i parametri in modo funzionale?
- 5. ruby-pg disinfetta i dati prima di inserire
- 6. che definisce i parametri inutilizzati in C
- 7. Funzioni di chiamata in SqlCommand
- 8. In che modo i compilatori C++ passano effettivamente i parametri di riferimento?
- 9. Un modo migliore per controllare i parametri?
- 10. xgboost in R: in che modo xgb.cv passa i parametri ottimali in xgb.train
- 11. C'è un modo per recuperare il testo sql completo da SqlCommand dopo la sostituzione del parametro?
- 12. In TCL, possiamo passare i parametri in questo modo?
- 13. C'è un modo per omettere i parametri?
- 14. Chiusura SqlConnection e SqlCommand C#
- 15. Come posso gestire in modo sicuro i parametri opzionali
- 16. RewriteRule che conserva i parametri GET
- 17. I parametri `auto &&` possono essere inoltrati in modo perfetto?
- 18. Il modo migliore per implementare i parametri in JavaScript?
- 19. Generics Java che passa i parametri
- 20. MSBuild che passa i parametri a CallTarget
- 21. Come utilizzare i parametri "@" in un comando SQL in VB
- 22. Carica il controllo utente in modo dinamico con i parametri
- 23. In che modo avere valori più piccoli per i parametri aiuta a evitare un adattamento eccessivo?
- 24. Come si formatta in modo che i parametri del metodo siano impilati verticalmente, uno per riga?
- 25. SqlCommand (istruzione using/problema Smaltimento)
- 26. SQLCommand/SQLConnection vs OleDbCommand/OleDbConnection
- 27. Timeout memorizzato e SqlCommand Timeout
- 28. In che modo i browser gestiscono JavaScript?
- 29. Come posso disinfettare tutti i parametri che arrivano in un'app Sinatra?
- 30. Va bene passare SQLCommand come parametro?
Grande domanda: è importante capire quanto sia profonda la sicurezza fornita dall'utilizzo di query parametrizzate. – RedFilter