Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 16201|Risposta: 0

[ASP.NET] ASP.NET dell'iniezione Anti-SQL

[Copiato link]
Pubblicato su 17/04/2015 13:06:50 | | |

1. Cos'è l'iniezione SQL?
     La cosiddetta iniezione SQL consiste nell'inserire comandi SQL nel modulo per inviare o inserire la stringa di query del nome di dominio o della richiesta di pagina, e infine ingannare il server facendogli eseguire alcuni comandi SQL dannosi. Inviando parametri per costruire istruzioni SQL intelligenti, puoi ottenere con successo i dati desiderati.

2. SQL tipo di iniezione
In particolare, l'iniezione SQL può essere suddivisa in cinque categorie, ovvero: iniezione di numeri, iniezione di caratteri, iniezione di ricerca (like), iniezione in e iniezione di connessione di frase.
Dal punto di vista applicativo, bisogna prestare particolare attenzione all'iniezione SQL nell'IP, alla ricerca, alla cancellazione batch e al trasferimento da database a database.

3. Come iniettare

Vediamo un esempio tipico
SqlCommand cmd = new SqlCommand("SELECT * FROM PE_USERS WHERE UserName = '"
2+ UserName + "' And UserPassword = '" + PassWord + "'", conn);

Poiché non c'è validazione per UserName e PassWord, se UserName="admin' OR 1=1--"
L'istruzione SQL eseguita diventa:

SELEZIONA * DA PE_USERS DOVE UserName='admin' O 1=1—' E UserPassword=''

Questo porta all'iniezione SQL, e le condizioni sono sempre valide, quindi puoi accedere con successo senza password.



4. Come prevenire l'iniezione SQL

1. Filtrare o convertire stringhe sospette

      L'iniezione SQL è prevenuta scrivendo funzioni che filtrano o convertono stringhe pericolose, e poi si utilizza GLOBAL.ASAX o riscrivo istanze contestuali

     Ecco un esempio

bool statico pubblico SqlFilter2(stringa InText)
2  {
3 string word="and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
4 se(InText==null)
5 restituire falso;
6 forach (stringa i in parola. Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 ritornano veri;
11    }
12   }
13 risponde falso;
14  }


2. Global.asax

Protected void Application_BeginRequest(Object sender, EventArgs e)
2  {
3 // Attraversare i parametri del Post, eccetto per i domini nascosti
4 forach (stringa i in questo). Richiesta.Modulo)
5   {
6 se(i=="__VIEWSTATE")continua;
7 questo.vaErr (questo. Request.Form.ToString());   
8   }
9 // Attraversa il parametro Get.
10 di forach (stringa i in questo). Request.QueryString)
11   {
12 this.goErr(this. Request.QueryString.ToString());   
13   }
14  }
vuoto privato goErr(stringa tm)
2  {
3 if(WLCW. Extend.CValidity.SqlFilter2(tm))
4 questo. Response.end()
5  }

Pro: Questo aspetto è usato dalla maggior parte dei programmatori principianti per prevenire l'iniezione SQL, e sembra funzionare bene per prevenire l'iniezione nella maggior parte dei casi.

Svantaggi: 1. Filtra alcuni caratteri che non erano stati originariamente usati per l'iniezione, causando problemi inaspettati. Ad esempio, se il nome di un membro del forum contiene gli stessi caratteri dei caratteri filtrati, questo causerà alcuni problemi e problemi imprevisti.

        2. È necessario filtrare o convertire ogni volta, riducendo l'efficienza del programma

2. Utilizzare procedure memorizzate per query parametriche

Lo scopo principale dell'iniezione SQL è eseguire comandi dannosi nel database inviando codice SQL malevolo. Pertanto, finché i comandi SQL vengono elaborati prima dell'esecuzione, l'iniezione SQL può essere efficacemente prevenuta. Le query parametrizzate possono efficacemente prevenire l'iniezione SQL.

Esempio

const stringa strSql = "SELECT * FROM [PE_Users] WHERE UserName = @UserName";
Parametri parms = nuovi Parametri("@UserName", DbType.String, userName);

Esiste un parametro @UserName sopra, usando l'oggetto Prarmeter, attraverso il quale il parametro viene aggiunto all'oggetto Comando,
Questo ti dà una query parametrizzata.
Come descritto sopra, ADO.NET invia la seguente istruzione SQL a SQL Server:

Exec sp_executesql N 'seleziona * da [pe_users] dove username=@username ',N
'@username nvarchar(20) ',@username=N 'nome'

SQL Server sostituisce @username con la stringa "name" prima di eseguire la query.
Supponiamo di avere i seguenti input:

'unione seleziona @@version, nullo, nullo—

L'istruzione SQL generata appare così:

Exec sp_executesql N 'seleziona * da [pe_users] dove username=@username ',N
'@username nvarchar(20) ',@username=N ''' unione seleziona @@version,null,null--'

Puoi vedere che ADO.NET sfugge all'input.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Copia codice


DbTye o SqlDbType possono essere una varietà di tipi di dati.
Puoi scegliere in base al tipo di dato.
In alcuni luoghi, può anche essere usato per specificare la lunghezza del parametro: dimensione int. Questo previene efficacemente anche i sovrappunti di database e le note SQL
Possibilità di entrare.
Pro: Previene efficacemente l'iniezione SQL.
Svantaggi: Alcuni luoghi non possono essere applicati, come in.

3. Whitelist

Descrizione:
Alcuni intervalli di parametri noti possono essere gestiti sotto forma di whitelist, che possono prevenire l'iniezione e l'interruzione di SQL
Sbagliato, ad esempio: ordinare per + nome colonna, quando il nome della colonna viene passato sotto forma di parametro, si può formulare una whitelist per giudicare prima il parametro
se il numero è nella whitelist, e poi interroga, altrimenti verrà elaborato in modo errato.
Vantaggi: sicuro e affidabile
Svantaggi: Ristretta gamma di applicazioni




Precedente:La casella di testo permette solo di inserire numeri
Prossimo:asp.net Editor di testo (FCKeditor)
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com