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. 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: Evaluering af resultaterne




