Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 16201|Antwoord: 0

[ASP.NET] ASP.NET van Anti-SQL-injectie

[Link kopiëren]
Geplaatst op 17-04-2015 13:06:50 | | |

1. Wat is SQL-injectie?
     De zogenaamde SQL-injectie is het invoeren van SQL-commando's in het formulierformulier om de querystring van de domeinnaam of het pageverzoek in te dienen of in te voeren, en uiteindelijk de server te misleiden om kwaadaardige SQL-commando's uit te voeren. Door parameters in te dienen om slimme SQL-statements te construeren, kun je succesvol de gewenste data verkrijgen.

2. SQL type injectie
Specifiek kan SQL-injectie worden onderverdeeld in vijf categorieën, namelijk: getalleninjectie, tekeninjectie, zoekinjectie (zoals), in-injectie en zinsverbindingsinjectie.
Vanuit applicatieperspectief moet speciale aandacht worden besteed aan SQL-injectie in IP, zoeken, batchverwijdering en overdracht van database naar database.

3. Hoe injecteren

Laten we naar een typisch voorbeeld kijken
SqlCommand cmd = nieuwe SqlCommand ("SELECT * FROM PE_USERS WHERE UserName = '"
2+ UserName + "' EN UserPassword = '" + PassWord + "'", conn);

Aangezien er geen validatie is voor UserName en PassWord, als UserName="admin' OF 1=1--"
De uitgevoerde SQL-instructie wordt:

SELECTEER * UIT PE_USERS WAAR UserName='admin' OF 1=1—' EN UserPassword=''

Dit resulteert in SQL-injectie, en de voorwaarden zijn altijd waar, dus je kunt succesvol inloggen zonder wachtwoord.



4. Hoe SQL-injectie te voorkomen

1. Filteren of converteren verdachte strings

      SQL-injectie wordt voorkomen door functies te schrijven die gevaarlijke strings filteren of converteren, en vervolgens GLOBAL.ASAX te gebruiken of contextinstanties te herschrijven

     Hier is een voorbeeld

publieke statische bool SqlFilter2(string InText)
2  {
3 string word="en|exec|insert|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
4 if(InText==null)
5 return false;
6 foreach(string i in word. Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 keer waar;
11    }
12   }
13 retourneren vals;
14  }


2. Global.asax

beschermde void Application_BeginRequest(Objectzender, EventArgs e)
2  {
3 // Door de Postparameters lopen, behalve voor verborgen domeinen
4 voor each(string i in dit. Request.Form)
5   {
6 als(i=="__VIEWSTATE")ga door;
7 dit.goErr(dit. Request.Form.ToString());   
8   }
9 // doorloop de Get-parameter.
10 voor elke (string i in dit. Request.QueryString)
11   {
12 dit.goErr(dit. Request.QueryString.ToString());   
13   }
14  }
private void goErr(string tm)
2  {
3 als (WLCW. Extend.CValidity.SqlFilter2(tm))
4 dit. Response.end()
5  }

Voordelen: Dit aspect wordt door de meeste beginnende programmeurs gebruikt om SQL-injectie te voorkomen, en het lijkt in de meeste gevallen goed te werken om injectie te voorkomen.

Nadelen: 1. Het filtert sommige tekens die oorspronkelijk niet voor injectie werden gebruikt, wat onverwachte problemen veroorzaakt. Als bijvoorbeeld de naam van een forumlid dezelfde tekens bevat als de gefilterde tekens, veroorzaakt dat onverwachte problemen en problemen.

        2. Filtering of conversie is elke keer nodig, wat de efficiëntie van het programma vermindert

2. Gebruik opgeslagen procedures voor parametrische queries

Het hoofddoel van SQL-injectie is het uitvoeren van kwaadaardige commando's in de database door kwaadaardige SQL-code in te dienen. Daarom kan, zolang SQL-commando's vóór uitvoering worden verwerkt, SQL-injectie effectief worden voorkomen. Geparametriseerde queries kunnen SQL-injectie effectief voorkomen.

Voorbeeld

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

Er is een parameter @UserName hierboven, met behulp van het Pranger-object, waardoor de parameter aan het Command-object wordt toegevoegd,
Dit geeft je een geparametriseerde query.
Zoals hierboven beschreven, stuurt ADO.NET de volgende SQL-instructie naar SQL Server:

Exec sp_executesql N 'selecteer * uit [pe_users] waar gebruikersnaam=@username ',N
'@username nvarchar(20) ',@username=N 'naam'

SQL Server vervangt @username door de string "name" voordat de query wordt uitgevoerd.
Stel dat je de volgende invoer hebt:

'Union select @@version, null, null—

De gegenereerde SQL-instructie ziet er als volgt uit:

Exec sp_executesql N 'selecteer * uit [pe_users] waar gebruikersnaam=@username ',N
'@username nvarchar(20) ',@username=N ''' unie selecteren @@version,null,null--'

Je ziet dat ADO.NET de input ontglipt.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Code kopiëren


DbTye of SqlDbType kunnen verschillende soorten data zijn.
Je kunt kiezen op basis van je datatype.
Op sommige plaatsen kan het ook worden gebruikt om de lengte van de parameter: int-grootte te specificeren. Dit voorkomt ook effectief databaseoverflows en SQL-notities
Mogelijkheid om binnen te komen.
Voordelen: Voorkomt effectief SQL-injectie.
Nadelen: Sommige plekken kunnen niet worden toegepast, zoals in.

3. Whitelist

Beschrijving:
Sommige bekende parameterbereiken kunnen worden behandeld in de vorm van whitelists, wat SQL-injectie en query's kan voorkomen
Fout, bijvoorbeeld: volgorde op + kolomnaam, wanneer de kolomnaam wordt doorgegeven in de vorm van een parameter, kan een whitelist worden geformuleerd om de parameter eerst te beoordelen
of het nummer in de whitelist staat, en dan een zoekopdracht indient, anders wordt het verkeerd verwerkt.
Voordelen: veilig en betrouwbaar
Nadelen: Klein scala aan toepassingen




Vorig:Het tekstvak laat alleen toe dat getallen worden ingevoerd
Volgend:asp.net Teksteditor (FCKeditor)
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com