Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 16201|Válasz: 0

[ASP.NET] ASP.NET az Anti-SQL injekció

[Linket másol]
Közzétéve 2015. 04. 17. 13:06:50 | | |

1. Mi az SQL injekció?
     Az úgynevezett SQL injekció az, hogy SQL parancsokat helyezünk be az űrlapűrlapba, hogy beküldjük vagy beírjuk a domain név vagy oldalkérés lekérdezési láncszálát, majd végül becsapjuk a szervert, hogy végrehajtson néhány rosszindulatú SQL parancsot. Ha paramétereket küldünk be okos SQL utasítások létrehozásához, sikeresen megszerezheted a kívánt adatokat.

2. SQL injekció típusa
Konkrétan az SQL injekció öt kategóriába sorolható: számbeépítés, karakterinjekció, keresési injekció (like), injekció és mondatkapcsolat injekció.
Az alkalmazás szempontjából különös figyelmet kell fordítani az SQL injekciójára az IP-ben, keresésre, köteges törlésre és az adatbázisról adatbázisba történő átvitelre.

3. Hogyan kell befecskendíteni

Nézzünk egy tipikus példát
SqlCommand cmd = új SqlCommand ("SELECT * FROM PE_USERS WHERE UserName = '"
2+ UserName + "' AND UserPassword = '" + PassWord + "'", conn);

Mivel nincs validáció a UserName és a PassWord esetében, ha UserName="admin' OR 1=1--"
A végrehajtott SQL utasítás a következőképpen alakul ki:

VÁLASSZ * FROM PE_USERS WHERE UserName='admin' OR 1=1—' AND UserPassword=''

Ez SQL befecskendezést eredményez, és a feltételek mindig érvényesek, így jelszó nélkül is sikeresen be tudsz jelentkezni.



4. Hogyan lehet megakadályozni az SQL befecskendezését

1. Gyanús sorozatok szűrése vagy átalakítása

      Az SQL injekciót megakadályozzuk, ha olyan függvényeket írunk, amelyek szűrik vagy konvertálják a veszélyes stringeket, majd GLOBAL.ASAX-ot használnak vagy kontextuspéldányokat írnak át

     Íme egy példa

public static bool SqlFilter2(string InText)
2  {
3 soros word="és|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
4 if(InText==null)
5 hamis;
6 foreach (i string a wordben). Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 igaz visszaad;
11    }
12   }
13 hamis;
14  }


2. Global.asax

protected void Application_BeginRequest(Object sender, EventArgs e)
2  {
3 // A Post paraméterek áthaladása, kivéve a rejtett domaineket
4 foreach (string i ebben. Request.Form)
5   {
6 ha(i=="__VIEWSTATE")folytatás;
7 ez.goErr(ez. Request.Form.ToString());   
8   }
9 // Áthaladd a Get paramétert.
10 foreach (I-i szál ebben). Request.QueryString)
11   {
12 ez.goErr(ez. Request.QueryString.ToString());   
13   }
14  }
private void goErr(string tm)
2  {
3 ha(WLCW. Extend.CValidity.SqlFilter2(tm))
4 ez. Response.end()
5  }

Előnyök: Ezt a funkciót a legtöbb kezdő programozó használja az SQL befecskendezés megelőzésére, és úgy tűnik, hogy ez a befecskendezés megelőzésére is a legtöbb esetben.

Hátrányok: 1. Szűr néhány karaktert, amelyeket eredetileg nem használtak befecskendezésre, ami váratlan problémákat okoz. Például, ha egy fórumtag neve ugyanazokat a karaktereket tartalmazza, mint a szűrt karakterek, az váratlan problémákat és gondokat okozhat.

        2. Minden alkalommal szűrés vagy átalakítás szükséges, ami csökkenti a program hatékonyságát

2. Paraméteres lekérdezésekhez tárolt eljárások használata

Az SQL injekció fő célja, hogy rosszindulatú parancsokat hajtson végre az adatbázisban azáltal, hogy rosszindulatú SQL kódot küld be. Ezért, amíg az SQL parancsokat a végrehajtás előtt feldolgozják, az SQL injekció hatékonyan megelőzhető. A paraméterezett lekérdezések hatékonyan megakadályozhatják az SQL befecskendezését.

Példa

const string strSql = "SELECT * FROM [PE_Users] WHERE UserName = @UserName";
Paraméterek parms = új Paraméterek("@UserName", DbType.String, userName);

Fentebb van egy @UserName paraméter, a Prarmeter objektum használatával, amelyen keresztül a paraméter hozzáadódik a Command objektumhoz,
Ez egy paraméterezett lekérdezést ad.
Ahogy fentebb leírták, ADO.NET a következő SQL utasítást küldi az SQL Servernek:

Exec sp_executesql N 'válassz * a [pe_users] helyről, ahol username=@username ',N
'@username nvarchar(20) ',@username=N 'név'

Az SQL Server a lekérdezés végrehajtása előtt a "name" sorra cseréli @username.
Tegyük fel, hogy a következő bemenetek vannak:

'Union select @@version,null,null—

A generált SQL utasítás így néz ki:

Exec sp_executesql N 'válassz * a [pe_users] helyről, ahol username=@username ',N
'@username nvarchar(20) ',@username=N ''' unió select @@version,null,null--'

Láthatod, hogy ADO.NET kikerüli a bemenetet.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Kód másolása


A DbTye vagy SqlDbType különböző adattípusok lehetnek.
Az adattípusod alapján választhatsz.
Bizonyos helyeken a paraméter hosszának meghatározására is használható: int size. Ez hatékonyan megakadályozza az adatbázis túlcsordulását és SQL jegyzeteit is
Lehetőség a belépésre.
Előnyök: Hatékonyan megakadályozza az SQL befecskendezést.
Hátrányok: Egyes helyeken nem alkalmazhatók, például

3. Fehérlista

Leírás:
Néhány ismert paramétertartomány kezelhető fehérlisták formájában, amelyek megakadályozhatják az SQL befecskendezését és lekérdezését
Hibás például: sorrend + oszlopnév szerint, amikor az oszlop nevét paraméter formájában továbbítják, egy fehérlistát lehet megfogalmazni, hogy először megítélje a paramétert
hogy a szám benne van-e a fehérlistán, majd lekérdezés, különben rosszul lesz feldolgozva.
Előnyök: biztonságos és megbízható
Hátrányok: Kis alkalmazási kör




Előző:A szövegdoboz csak számok beírását engedélyezi
Következő:asp.net Szövegszerkesztő (FCKeditor)
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com