Skip to main content

Testing for SQL Injection Vulnerabilities

SQL Injection - Testing a website for vulnerability (Juni 2026)

SQL Injection - Testing a website for vulnerability (Juni 2026)
Anonim

SQL-indsprøjtningsangreb udgør enorme risici for webapplikationer, som er afhængige af en databasebackend for at generere dynamisk indhold. I denne type angreb manipulerer hackere en webapplikation i et forsøg på at indsprøjte deres egne SQL-kommandoer til dem, der udstedes af databasen. For eksempel, se artiklen SQL Injection Attacks på databaser. I denne artikel tager vi et kig på flere måder, hvorpå du kan teste dine webapplikationer for at afgøre, om de er sårbare overfor SQL Injection attacks.

Automatiseret SQL Injektionsscanning

En mulighed er at bruge en automatiseret scanning til webapplikations sårbarhed, såsom HP's WebInspect, IBMs AppScan eller Cenzic's Hailstorm. Disse værktøjer alle tilbyder nemme, automatiserede måder at analysere dine webapplikationer på for mulige SQL Injection sårbarheder. Men de er ret dyre og løber op til $ 25.000 pr. Sæde.

Manuel SQL Injektionstest

Hvad er en dårlig applikationsudvikler at gøre? Du kan faktisk køre nogle grundlæggende tests til at evaluere dine webapplikationer til SQL Injection sårbarheder ved hjælp af intet mere end en webbrowser. For det første et ord af forsigtighed: de tests, vi beskriver kun kigge efter grundlæggende SQL Injection fejl. De vil ikke registrere avancerede teknikker og er noget kedelige at bruge. Hvis du har råd til det, skal du gå med en automatiseret scanner. Men hvis du ikke kan håndtere denne pris, er manuel testning et godt første skridt.Den nemmeste måde at vurdere, om en applikation er sårbar, er at eksperimentere med uskadelige injektionsangreb, der ikke vil skade din database, hvis de lykkes, men vil give dig bevis for, at du har brug for at rette op på et problem. Antag for eksempel, at du havde en simpel webapplikation, der ser op en person i en database og giver kontaktoplysninger som følge heraf. Denne side kan bruge følgende URL-format:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike

Vi kan antage, at denne side udfører en databaseopslag ved hjælp af en forespørgsel svarende til følgende:

SELECT-telefon

FRA katalog

Hvor efternavn = 'chapple' og fornavn = 'mike'

Lad os eksperimentere med dette lidt. Med vores antagelse ovenfor kan vi foretage en simpel ændring til den webadresse, der tester for SQL-indsprøjtning angreb:

http://myfakewebsite.com/directory.asp?lastname=chapple&firstname=mike'+AND+(select+count(*)+from+fake)+%3e0+OR+'1'%3d'1

Hvis webapplikationen ikke er korrekt beskyttet mod SQL-indsprøjtning, stikker den simpelthen dette falske fornavn i SQL-sætningen, der udføres mod databasen, hvilket resulterer i:

SELECT-telefon

FRA katalog

Hvor efternavn = 'chapple' og fornavn = 'mike'

OG (vælg tælle (*) fra falsk)> 0

ELLER '1' = '1'

Du vil bemærke, at syntaksen ovenfor er lidt anderledes end den i den oprindelige webadresse. Vi tog friheden til at konvertere den URL-kodede variabel for deres ASCII-ækvivalenter for at gøre det nemmere at følge eksemplet. For eksempel er% 3d URL-kodningen for tegnet '='. Vi har også tilføjet nogle linjeskift til lignende formål.

Evaluering af resultaterne

Testen kommer, når du forsøger at indlæse websiden med den ovenfor anførte webadresse. Hvis webapplikationen er velopdragen, vil den fjerne de enkelte citater fra indgangen, før de sender forespørgslen til databasen. Dette vil simpelthen resultere i et underligt opslag for en person med et fornavn, der indeholder en masse SQL. Du får vist en fejlmeddelelse fra programmet, der ligner den nedenfor:

Fejl: Ingen bruger fundet med navn mike + AND + (vælg + tælle (*) + fra + falsk) +% 3e0 + OR + 1% 3d1

Chapple!

På den anden side, hvis applikationen er sårbar over for SQL-indsprøjtning, vil den passere erklæringen direkte til databasen, hvilket resulterer i en af ​​to muligheder. For det første, hvis din server har detaljerede fejlmeddelelser aktiveret (som du ikke bør), vil du se noget sådan her:

Microsoft OLE DB Provider for ODBC drivere fejl '80040e37'

Microsoft ODBC SQL Server Driver SQL Server Ugyldigt objektnavn 'falsk'.

/directory.asp, linje 13

På den anden side, hvis din webserver ikke viser detaljerede fejlmeddelelser, får du en mere generisk fejl, såsom:

Intern serverfejlServeren opdagede en intern fejl eller fejlkonfiguration og kunne ikke gennemføre din anmodning.

Kontakt serveradministratoren for at informere om den tid, fejlen opstod, og om alt, hvad du måske har gjort, der kan have forårsaget fejlen.

Flere oplysninger om denne fejl kan være tilgængelige i serverfejlloggen.

Hvis du modtager en af ​​de to fejl ovenfor, er din ansøgning sårbar over for SQL-indsprøjtningsangreb. Nogle trin, du kan tage for at beskytte dine applikationer mod SQL Injection-angreb, er:

  • Gennemfør parametercheck på alle applikationer. Hvis du for eksempel beder nogen om at indtaste et kundenummer, skal du sørge for at indtastningen er numerisk, før du udfører forespørgslen.
  • Begræns tilladelserne for den konto, der udfører SQL-forespørgsler. Reglen om mindste privilegium gælder. Hvis den konto, der bruges til at udføre forespørgslen, ikke har tilladelse til at udføre den, lykkes det ikke.
  • Brug gemte procedurer (eller lignende teknikker) for at forhindre brugerne i at interagere direkte med SQL-koden.