Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 16201|Răspunde: 0

[ASP.NET] ASP.NET injecției Anti-SQL

[Copiază linkul]
Postat pe 17.04.2015 13:06:50 | | |

1. Ce este injecția SQL?
     Așa-numita injecție SQL este de a introduce comenzi SQL în formularul formularului pentru a trimite sau introduce șirul de interogare al cererii numelui de domeniu sau a paginii și, în final, păcălește serverul să execute comenzi SQL malițioase. Prin trimiterea parametrilor pentru a construi instrucțiuni SQL ingenioase, poți obține cu succes datele dorite.

2. SQL tip de injecție
Mai exact, injecția SQL poate fi împărțită în cinci categorii, și anume: injecția de numere, injecția de caractere, injecția de căutare (asemănătoare), injecția și injecția prin conexiune de propoziții.
Din punct de vedere al aplicației, ar trebui acordată o atenție specială injectării SQL în IP, căutare, ștergere în loturi și transfer de la o bază de date la alta.

3. Cum să injectezi

Să vedem un exemplu tipic
SqlCommand cmd = new SqlCommand("SELECT * FROM PE_USERS WHERE UserName = '"
2+ UserName + "' AND UserPassword = '" + WordPassWord + "'", conn);

Deoarece nu există validare pentru UserName și PassWord, dacă UserName="admin' OR 1=1--"
Instrucțiunea SQL executată devine:

SELECTEAZĂ * DIN PE_USERS UNDE NumeUtilizator='admin' SAU 1=1—' ȘI UserPassword=''

Acest lucru duce la injectarea SQL, iar condițiile sunt întotdeauna adevărate, astfel încât poți să te conectezi cu succes fără parolă.



4. Cum să previi injecția SQL

1. Filtrarea sau conversia șirurilor suspecte

      Injectarea SQL este prevenită prin scrierea funcțiilor care filtrează sau convertesc șiruri periculoase, apoi utilizează GLOBAL.ASAX sau rescrie instanțele contextului

     Iată un exemplu

bool static public SqlFilter2(string InText)
2  {
3 string word="and|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
4 if(InText==null)
5 returnează false;
6 forach (șir i în cuvânt. Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 returnează adevărul;
11    }
12   }
13 returnează false;
14  }


2. Global.asax

Vid protejat Application_BeginRequest(Object sender, EventArgs e)
2  {
3 // Parcurgerea parametrilor Postului, cu excepția domeniilor ascunse
4 foreach (firul i în acesta). Solicitare.Formular)
5   {
6 dacă(i=="__VIEWSTATE")continuă;
7 asta.goErr (asta. Request.Form.ToString());   
8   }
9 // Traversează parametrul Get.
10 forach (șirul i în asta). Request.QueryString)
11   {
12 asta.goErr (asta. Request.QueryString.ToString());   
13   }
14  }
vid privat goErr (string tm)
2  {
3 dacă (WLCW. Extend.CValidity.SqlFilter2(tm))
4 asta. Răspuns.sfârșit()
5  }

Pro: Acest aspect este folosit de majoritatea programatorilor începători pentru a preveni injecția SQL și pare să funcționeze bine pentru a preveni injecția în majoritatea cazurilor.

Dezavantaje: 1. Va filtra unele caractere care nu au fost folosite inițial pentru injecție, cauzând probleme neașteptate. De exemplu, dacă numele unui membru al forumului conține aceleași caractere ca și cele filtrate, acest lucru va cauza unele probleme și probleme neașteptate.

        2. Filtrarea sau conversia este necesară de fiecare dată, ceea ce reduce eficiența programului

2. Utilizarea procedurilor stocate pentru interogări parametrice

Scopul principal al injecției SQL este de a executa comenzi malițioase în baza de date prin trimiterea codului SQL malițios. Prin urmare, atâta timp cât comenzile SQL sunt procesate înainte de execuție, injecția SQL poate fi prevenită eficient. Interogările parametrizate pot preveni eficient injectarea SQL.

Exemplu

const string strSql = "SELECT * FROM [PE_Users] WHERE UserName = @UserName";
Parameters parms = new Parameters ("@UserName", DbType.String, userName);

Există un parametru @UserName mai sus, folosind obiectul Prarmeter, prin care parametrul este adăugat obiectului Comandă,
Aceasta îți oferă o interogare parametrizată.
Așa cum s-a descris mai sus, ADO.NET trimite următoarea instrucțiune SQL către SQL Server:

Exec sp_executesql N 'selectează * din [pe_users] unde username=@username ',N
'@username nvarchar(20) ',@username=N 'nume'

SQL Server înlocuiește @username cu șirul "name" înainte de a executa interogarea.
Să presupunem că ai următoarele inputuri:

'uniune select @@version, null, null—

Instrucțiunea SQL generată arată astfel:

Exec sp_executesql N 'selectează * din [pe_users] unde username=@username ',N
'@username nvarchar(20) ',@username=N ''' selecție de uniune @@version,null,null--"

Poți vedea că ADO.NET scapă din input.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Cod de copiere


DbTye sau SqlDbType pot fi o varietate de tipuri de date.
Poți alege în funcție de tipul tău de date.
În unele locuri, poate fi folosit și pentru a specifica lungimea parametrului: mărimea int. Acest lucru previne, de asemenea, efectiv suprasolicitările bazei de date și notițele SQL
Posibilitatea de a intra.
Pro: Previne eficient injectarea SQL.
Dezavantaje: Unele locuri nu pot fi aplicate, cum ar fi în.

3. Lista albă

Descriere:
Unele intervale de parametri cunoscute pot fi gestionate sub forma unor liste albe, care pot preveni injectarea SQL și interogarea
Greșit, de exemplu: ordonează după + numele coloanei, când numele coloanei este transmis sub forma unui parametru, se poate formula o listă albă pentru a judeca mai întâi parametrul
dacă numărul este în lista albă și apoi interogează, altfel va fi procesat incorect.
Avantaje: sigur și de încredere
Dezavantaje: Gama restrânsă de aplicații




Precedent:Caseta de text permite introducerea doar a numerelor
Următor:asp.net Editor de text (FCKeditor)
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com