2012-01-31 14 views
9

È la prima volta che sviluppo utilizzando MVC e voglio renderlo sicuro.Iniezione SQL di controllo in MVC

Quando utilizzo HtmlEncode, converte la stringa nella stringa HTML equivalente.

L'utente può inserire nella ricerca per esempio ali 'o ali-- e esistono nel mio database. Come controllare la mia ricerca e il login da SQL injection per favore?

Inoltre, qualsiasi esercitazione o procedura consigliata per impedire l'inserimento di script?

+0

come si accede al proprio database? LINQ? Entity Framework? –

+0

Io uso quello normale, che preferisci LINQ o Entity framework – AMH

+1

Controlla questo [link SO] (http://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql) ... Entrambi verificheranno l'iniezione sql per voi .... –

risposta

15

LINQ e Entity Framework controllano già per SQL Injection.

Ma si dovrebbe leggere la documentazione in ogni caso:

LINQ (attacchi sezione SQL-Injection) MSDN Link

Entity Framework MSDN Link (sezione Considerazioni di sicurezza per le query)

Speranza che aiuta!

+0

per quanto riguarda l'iniezione di script – AMH

+0

@AMH Credo che dovrebbe essere un'altra domanda, ma questo collegamento potrebbe essere utile: [asp tutorial] (http://www.asp.net/mvc/tutorial/versioni precedenti/sicurezza/prevenzione-javascript-injection-attack-cs) –

+0

che preferisci per favore LINQ o EF – AMH

4

Se si utilizza LINQ per eseguire le query del database, elimina quel tipo di rischi di iniezione SQL per l'utente.

+0

grazie supporta i database ROM, per quanto riguarda l'iniezione di script per favore – AMH

7

Fintanto che si utilizzano query con parametri o un ORM come NHibernate o Entity Framework, non è necessario eseguire alcuna operazione per impedire l'iniezione SQL. I parametri vengono passati al server all'esterno dell'istruzione SQL effettiva, come parte della chiamata RPC al server. La maggior parte degli ORM utilizza query parametrizzate per motivi di prestazioni, quindi non sono vulnerabili all'iniezione SQL.

SQL Injection è possibile solo se si crea un'istruzione SQL concatenando valori stringa.

Detto questo, è ancora necessario diffidare dell'input dell'utente per evitare attacchi di script injection. Fortunatamente, ASP.NET MVC fornisce già un meccanismo di convalida delle richieste (vedere Understanding Request Validation).

+0

ma sono stanco di rilasciare il database che conosco passando i valori dai parametri – AMH

+0

Indipendentemente da cosa passi al parametro (e per parametro intendo un oggetto derivato da DbParameter come SqlParameter (http://msdn.microsoft.com/en-us/library/system.data.common.dbparameter.aspx), sarà passato al server come una semplice stringa e non verrà mai eseguito. È ancora possibile creare problemi se si utilizza il valore memorizzato per costruire un'istruzione SQL mediante concatenazione di stringhe in qualche altra parte dell'applicazione. –

Problemi correlati