See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 16201|Vastuse: 0

[ASP.NET] ASP.NET Anti-SQL süstimisest

[Kopeeri link]
Postitatud 17.04.2015 13:06:50 | | |

1. Mis on SQL-i süstimine?
     Nn SQL-süstmine tähendab SQL-käskude sisestamist vormivormi, et esitada või sisestada domeeninime või lehe päringu string ning lõpuks petta server käivitama pahatahtlikke SQL-käske. Parameetrite esitamisega nutikate SQL-lausete koostamiseks saad edukalt soovitud andmed.

2. SQL süstitüüp
Täpsemalt saab SQL-süstimise jagada viide kategooriasse: numbrisüstimine, tähemärgisüstimine, otsingusüstimine (like), sissesüstimine ja lauseseose süstimine.
Rakenduse seisukohast tuleks erilist tähelepanu pöörata SQL-i süstimisele IP-s, otsingule, partiikustutamisele ja andmebaasist andmebaasi ülekandmisele.

3. Kuidas süstida

Vaatame tüüpilist näidet
SqlCommand cmd = uus SqlCommand ("SELECT * FROM PE_USERS KUS Kasutajanimi = '"
2+ UserName + "' AND UserPassword = '" + PassWord + "'", conn);

Kuna UserName ja PassWordi valideerimist ei ole, siis kui UserName="admin' OR 1=1--"
Käivitatud SQL-lause on järgmine:

VALI * PE_USERS KUS UserName='admin' VÕI 1=1—' JA UserPassword=''

See viib SQL-i süstimiseni ja tingimused kehtivad alati, nii et saad edukalt sisse logida ilma paroolita.



4. Kuidas vältida SQL-i süstimist

1. Filtreeri või teisenda kahtlaseid stringe

      SQL-süstimist takistatakse, kui kirjutatakse funktsioone, mis filtreerivad või teisendavad ohtlikke stringe ning seejärel kasutavad GLOBAL.ASAX-i või kirjutavad konteksti instantse ümber

     Siin on näide

public static bool SqlFilter2(string InText)
2  {
3 string word="ja|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|joine";
4 if(InText==null)
5 tagastab vale;
6 foreach (string i sõnas. Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 tagastab tõe;
11    }
12   }
13 on vale;
14  }


2. Global.asax

kaitstud void Application_BeginRequest(Objekti saatja, EventArgs e)
2  {
3 // Posti parameetrite läbiviimine, välja arvatud peidetud domeenid
4 foreach (string i siin. Request.Form)
5   {
6 if(i=="__VIEWSTATE")jätkub;
7 see.goErr(see. Request.Form.ToString());   
8   }
9 // Läbige Get parameeter.
10 foreach (string i siin. Request.QueryString)
11   {
12 seda.goErr(see. Request.QueryString.ToString());   
13   }
14  }
privaatne void goErr (string tm)
2  {
3 kui(WLCW. Extend.CValidity.SqlFilter2(tm))
4 seda. Response.end()
5  }

Plussid: Seda aspekti kasutavad enamik algajaid programmeerijatest SQL-i süstimise vältimiseks ja tundub, et see töötab enamikul juhtudel hästi süstimise vältimiseks.

Puudused: 1. See filtreerib mõningaid märke, mida algselt süstimiseks ei kasutatud, põhjustades ootamatuid probleeme. Näiteks, kui foorumiliikme nimi sisaldab samu märke nagu filtreeritud tähed, võib see põhjustada ootamatuid probleeme ja probleeme.

        2. Iga kord on vaja filtreerida või teisendada, mis vähendab programmi efektiivsust

2. Kasuta salvestatud protseduure parameetriliste päringute jaoks

SQL süstimise peamine eesmärk on käivitada pahatahtlikke käske andmebaasis, esitades pahatahtlikku SQL-koodi. Seega, kui SQL-käsud töödeldakse enne täitmist, saab SQL-süstimist tõhusalt vältida. Parametriseeritud päringud võivad tõhusalt takistada SQL-i süstimist.

Näide

const string strSql = "SELECT * FROM [PE_Users] KUS UserName = @UserName";
Parameetrid parms = uued parameetrid("@UserName", DbType.String, userName);

Ülaltoodud parameeter @UserName, kasutades Prarmeteri objekti, mille kaudu parameeter lisatakse Command objektile,
See annab sulle parameetristatud päringu.
Nagu eespool kirjeldatud, saadab ADO.NET SQL Serverile järgmise SQL-lause:

Exec sp_executesql N 'vali * [pe_users] juurest, kus kasutajanimi=@username ',N
'@username nvarchar(20) ',@username=N 'nimi'

SQL Server asendab @username stringiga "name" enne päringu käivitamist.
Oletame, et sul on järgmised sisendid:

'Ametiühing vali @@version,null,null—

Genereeritud SQL-lause näeb välja selline:

Exec sp_executesql N 'vali * [pe_users] juurest, kus kasutajanimi=@username ',N
'@username nvarchar(20) ',@username=N ''' liit select @@version,null,null--'

Näete, et ADO.NET pääseb sisendist välja.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Kopeeri kood


DbTye või SqlDbType võib olla mitmesuguseid andmetüüpe.
Sa saad valida vastavalt oma andmetüübile.
Mõnes kohas saab seda kasutada ka parameetri pikkuse määramiseks: int suurus. See takistab tõhusalt ka andmebaasi ületäitumist ja SQL-märkmeid
Võimalus siseneda.
Plussid: Tõhusalt takistab SQL-i süstimist.
Puudused: Mõnda kohta ei saa rakendada, näiteks

3. Valgenimekiri

Kirjeldus:
Mõningaid tuntud parameetrite vahemikke saab hallata valgete nimekirjade kujul, mis võivad takistada SQL-i süstimist ja päringuid
Vale, näiteks: järjestus + veeru nime järgi, kui veeru nimi edastatakse parameetri kujul, saab koostada valge nimekirja, mis hindab parameetrit esimesena
kas number on valges nimekirjas, ja siis päringu, vastasel juhul töödeldakse seda valesti.
Eelised: ohutu ja usaldusväärne
Puudused: Rakenduste valik on väike




Eelmine:Tekstikast lubab sisestada ainult numbreid
Järgmine:asp.net Tekstiredaktor (FCKeditor)
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com