Come posso evitare gli attacchi SQL injection nella mia applicazione ASP.NET?


Answers

Usa le istruzioni preparate (collega a un'esercitazione ASP.NET che utilizza istruzioni preparate nella sezione "Per aggiungere nodi per prodotti"). questo è tutto ciò che c'è da fare.

Bene, che o utilizzare un ORM, come Linq a SQL o NHibernate , utilizzano internamente istruzioni preparate.

Question

Devo evitare di essere vulnerabile all'iniezione SQL nella mia applicazione ASP.NET. Come potrei realizzare questo?




Prova a utilizzare stored procedure e convalida l'input sui tuoi dati. Non utilizzare alcun SQL diretto come INSERT INTO ...




Tutti dicono "Usa parametri". Dovremmo dirlo meno se non fosse così perversamente difficile.

Utilizza QueryFirst . La tentazione di concatenare viene rimossa e la strada giusta diventa la via più semplice. Puoi creare un parametro semplicemente digitando @myParam nel tuo SQL, lo strumento fa il resto.

disclaimer: Ho scritto QueryFirst




Non fidarti MAI dell'input dell'utente, convalidarlo sempre e utilizzare i parametri sql. Dovrebbe essere una base sufficiente per prevenire l'iniezione SQL.




Non fidarti mai dell'input dell'utente : convalida tutte le voci della casella di testo utilizzando i controlli di convalida, le espressioni regolari, il codice e così via

Non utilizzare mai SQL dinamico : utilizzare SQL con parametri o stored procedure

Non connetterti mai a un database utilizzando un account a livello di amministratore : utilizza un account ad accesso limitato per connettersi al database

Non archiviare segreti in testo semplice : crittografare o hash password e altri dati sensibili; dovresti anche crittografare le stringhe di connessione

Le eccezioni dovrebbero divulgare informazioni minime : non rivelare troppe informazioni nei messaggi di errore; utilizzare CustomErrors per visualizzare informazioni minime in caso di errore non gestito; imposta il debug su false

Link utile su MSDN Stop SQL Injection




Utilizzare query parametrizzate e / o stored procedure e analizzare i parametri tramite parametri SQL. Non generare mai codice SQL concatenando le stringhe. Fai anche qualche lettura sull'iniezione SQL e sulla scrittura di codice sicuro, perché impedire l'iniezione SQL è solo una piccola parte della sicurezza. Ce ne sono molti altri (come XSS - Cross Site Scripting). Se un hacker vuole compromettere il tuo sito / applicazione, cercherà più di SQL injection.




Utilizza sempre solo query parametrizzate.




Come altri hanno già detto, non concatenare l'input dell'utente per creare istruzioni SQL dinamiche; usa sempre SQL parametrizzato quando usi SQL dinamico. Tuttavia, farò notare che questa regola si applica anche quando si crea un SQL dinamico all'interno di un processo memorizzato . Questo fatto è qualcosa che le persone spesso trascurano. Pensano di essere al sicuro perché "utilizzano procedure memorizzate".