Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 16201|Svare: 0

[ASP.NET] ASP.NET av Anti-SQL-injeksjon

[Kopier lenke]
Publisert på 17.04.2015 13:06:50 | | |

1. Hva er SQL-injeksjon?
     Den såkalte SQL-injeksjonen går ut på å sette inn SQL-kommandoer i skjemaet for å sende inn eller legge inn spørringsstrengen til domenenavnet eller sideforespørselen, og til slutt lure serveren til å utføre noen ondsinnede SQL-kommandoer. Ved å sende inn parametere for å konstruere smarte SQL-setninger, kan du med suksess oppnå ønsket data.

2. SQL type injeksjon
Spesifikt kan SQL-injeksjon deles inn i fem kategorier, nemlig: tallinjeksjon, tegninjeksjon, søkeinjeksjon (som), in-injeksjon, og setningsinjeksjon.
Fra et applikasjonsperspektiv bør det vies spesiell oppmerksomhet til SQL-injeksjon i IP, søk, batch-sletting og overføring fra database til database.

3. Hvordan injisere

La oss se på et typisk eksempel
SqlCommand cmd = ny SqlCommand("SELECT * FROM PE_USERS WHERE UserName = '"
2+ brukernavn + "' OG brukerpassord = '" + passord + "'", konn);

Siden det ikke finnes validering for Brukernavn og PassWord, hvis Brukernavn="admin' ELLER 1=1--"
Den utførte SQL-setningen blir:

VELG * FRA PE_USERS HVOR Brukernavn='admin' ELLER 1=1—' OG BrukerPassord=''

Dette resulterer i SQL-injeksjon, og betingelsene er alltid sanne, så du kan logge inn uten passord.



4. Hvordan forhindre SQL-injeksjon

1. Filtrer eller konverter mistenkelige strenger

      SQL-injeksjon forhindres ved å skrive funksjoner som filtrerer eller konverterer farlige strenger, og deretter bruker GLOBAL.ASAX eller omskriver kontekstinstanser

     Her er et eksempel

offentlig statisk bool SqlFilter2(streng InText)
2  {
3 streng word="og|exec|sett inn|select|delete|update|chr|mid|master|or|truncate|char|declare|join";
4 if(InText==null)
5 retur falsk;
6 foreach(streng i i Word. Split('|'))
7   {
8 if((InText.ToLower(). IndexOf(i+" ")>-1)|| (InText.ToLower(). IndexOf(" "+i)>-1))
9    {
10 returnerer sann;
11    }
12   }
13 returner falsk;
14  }


2. Global.asax

beskyttet void Application_BeginRequest(Objektavsender, EventArgs e)
2  {
3 // Traversering av postparametrene, bortsett fra skjulte domener
4 foreach(streng i i denne. Request.Form)
5   {
6 hvis(i=="__VIEWSTATE")fortsett;
7 this.goErr(this. Request.Form.ToString());   
8   }
9 // Traversere Get-parameteren.
10 foreach(streng i i denne. Request.QueryString)
11   {
12 this.goErr(this. Request.QueryString.ToString());   
13   }
14  }
privat tomrom goErr(streng tm)
2  {
3 hvis (WLCW. Extend.CValidity.SqlFilter2(tm))
4 dette. Response.end()
5  }

Fordeler: Dette aspektet brukes av de fleste nybegynnere for å forhindre SQL-injeksjon, og det ser ut til å fungere godt for å forhindre injeksjon i de fleste tilfeller.

Ulemper: 1. Den vil filtrere noen tegn som opprinnelig ikke ble brukt til injeksjon, noe som forårsaker uventede problemer. For eksempel, hvis et forummedlems navn inneholder de samme tegnene som de filtrerte tegnene, vil det føre til noen uventede problemer og problemer.

        2. Filtrering eller konvertering er nødvendig hver gang, noe som reduserer programmets effektivitet

2. Bruk lagrede prosedyrer for parametriske spørringer

Hovedformålet med SQL-injeksjon er å utføre ondsinnede kommandoer i databasen ved å sende inn ondsinnet SQL-kode. Derfor, så lenge SQL-kommandoer behandles før utførelse, kan SQL-injeksjon effektivt forhindres. Parameteriserte spørringer kan effektivt forhindre SQL-injeksjon.

Eksempel

const streng strSql = "VELG * FRA [PE_Users] HVOR Brukernavn = @UserName";
Parametere parms = nye parametere ("@UserName", DbType.String, brukernavn);

Det finnes en parameter @UserName ovenfor, ved bruk av Pranger-objektet, gjennom hvilken parameteren legges til Command-objektet,
Dette gir deg en parameterisert spørring.
Som beskrevet ovenfor sender ADO.NET følgende SQL-setning til SQL Server:

Exec sp_executesql N 'velg * fra [pe_users] hvor brukernavn=@username ',N
'@username nvarchar(20) ',@username=N 'navn'

SQL Server erstatter @username med strengen "navn" før spørringen kjøres.
Anta at du har følgende input:

'Union select @@version, null, null—

Den genererte SQL-setningen ser slik ut:

Exec sp_executesql N 'velg * fra [pe_users] hvor brukernavn=@username ',N
'@username nvarchar(20) ',@username=N '''' union select @@version,null,null--'

Du kan se at ADO.NET unngår inputen.

  1. public SqlParameter Add(string parameterName, SqlDbType sqlDbType, int size);
Kopier koden


DbTye eller SqlDbType kan være en rekke ulike datatyper.
Du kan velge basert på datatypen din.
På noen steder kan det også brukes til å spesifisere lengden på parameteren: int-størrelse. Dette forhindrer også effektivt databaseoverløp og SQL-notater
Mulighet for å komme inn.
Fordeler: Forhindrer effektivt SQL-injeksjon.
Ulemper: Noen steder kan ikke brukes, som for eksempel i.

3. Hviteliste

Beskrivelse:
Noen kjente parameterområder kan håndteres i form av hvitelister, noe som kan forhindre SQL-injeksjon og spørringer
Feil, for eksempel: sorter etter + kolonnenavn, når kolonnenavnet sendes i form av en parameter, kan en hviteliste formuleres for å vurdere parameteren først
om nummeret er i hvitelisten, og deretter søker, ellers vil det bli behandlet feil.
Fordeler: trygt og pålitelig
Ulemper: Lite bruksområde




Foregående:Tekstboksen tillater kun at tall skrives inn
Neste:asp.net Tekstredigerer (FCKeditor)
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com