, sql injektionsvæske er en teknik, som gør det muligt for en mand at henrette uautoriseret sql kommandoer ved at drage fordel af urene input muligheder i web - ansøgninger, opbygge dynamiske sql forespørgsler.en fælles eksempel herpå er følgende: en form, der er anvendt til at indsamle en gæst ' s brugernavn og password for at få adgang til et sikret afdeling, og har gjort gældende, at en slange forarbejdning manuskript.forarbejdning manus bygger en sql forespørgsel fra input til at fastslå, om brugernavn og password er gyldig., i et sådant scenario, som man kan bygge to sider, et login html side og en slange side (execlogin. asp), som gør den faktiske validering (dvs. lookup af besøgende og' s brugernavn og kodeord i en database).The code for these pages might be: ,,, Login.htm ,, Username: ,, Password: ,, ExecLogin.asp ,, <% ,, Dim p_strUsername, p_strPassword, objRS, strSQL ,, p_strUsername = Request.Form("txtUsername") ,, p_strPassword = Request.Form("txtPassword") ,, strSQL = "SELECT * FROM tblUsers " & _ ,, "WHERE Username='" & p_strUsername & _ ,, "' and Password='" & p_strPassword & "'" ,, Set objRS = Server.CreateObject("ADODB.Recordset") ,, objRS.Open strSQL, "DSN=..." ,, If (objRS.EOF) Then ,, Response.Write "Invalid login." ,, Else ,, Response.Write "You are logged in as " & objRS("Username") ,, End If ,, Set objRS = Nothing ,, %> ,,, At first glance, the code in ExecLogin.asp does not appear to contain anysikkerhed huller.brugeren kan ikke logge ind uden en gyldig brugernavn og password kombination.denne kodeks er ikke sikker, og er klar til en < en href = "http: //asphostportal. kom /sql-2014-hosting" > sql injektion angreb.specifikt den sårbarhed, der er indeholdt i den kendsgerning, at brugerinput, anvendes til direkte at skabe sqlstatement, i kraft, der gør det muligt at kontrollere den erklæring, han henrettet., et eksempel på den sårbarhed, ville være, hvis følgende serie er opført i brugernavn og password områder: ' eller ' ' = '.det ville så blive henrettet sql erklæring:,,, udvælge * fra tblusers, hvor brugernavn = ' ' eller ' ' = ' ' og kodeord = ' ' eller ' ' = ' ',,, dette spørgsmål vil returnere alle optegnelser fra tblusers, og det vil fortsætte til log brugeren på den første bruger identificeres ved den første post i tabellen.,, en anden variation af sql injektion angreb eksisterer, når de modtager querystring parametre til at skabe dynamiske sider.nedenfor er et eksempel på en slange side, som accepterer en identifikation gennem querystring og dynamisk skaber s ' svovlindholdet baseret på id:,,, og<%, dim p_lngid, objrs, strsql,, p_lngid = anmodning (id), strsql = "vælg * fra tblarticles, hvor id =" & p_lngid,, der er objrs = server. createobject ("adodb. recordset"), objrs. åben strsql "dsn =..." hvis (ikke objrs. eof) så svar. skriv objrs ("articlecontent"), der er objrs = intet,,% >,,, under normale omstændigheder, det manuskript vil fremvise indholdet af artikel, hvis id blev vedtaget som en querystring parameter.for eksempel, den side kan betegnes som: http: //////////////www.example. kom /artikel [it] slange?id = 1055, hvilket er den dynamiske indhold for artikel 1055., som vores login eksempel, denne kode åbner sig selv til en sql injektion angreb.en ondsindet bruger kunne erstatte gælder artikel id for en uautoriseret sql kommando, som passerer ind i id - sådan: 0 eller 1 = 1 (dvs. http: //www.example [it] kom /article.asp?id = 0 eller 1 = 1).,, sql forespørgsel ville komme alle artikler fra bordet, for det ville være udført som:,,, udvælge * fra tblarticles, hvor id = 0 eller 1 = 1, naturligvis, at dette eksempel kan ikke synes at være yderst farligt, men han ville så være i stand til at manipulere anvendelse yderligere ved indsættelse af ondsindede kommandoer, såsom slette udtalelser.alt dette kan gøres ved at manipulere med querystring!for eksempel, man kunne kalde side ved hjælp af en querystring: http: //www.example [it] kom /article.asp?id = 1055; ikke tblarticles.,, konsekvenserne af sql injektion, konsekvenserne af denne sårbarhed varierer stærkt baseret på miljø - og konfiguration.hvis databasen forbindelse benytter sikkerhed i forbindelse med fødselsdato, er det muligt, at frafalde alle tabeller i databasen, skabe nye tabeller osv. hvis databasen forbindelse benytter sikkerhed i forbindelse med sa, det er muligt at kontrollere hele sql - serveren, og under de rigtige udformning skabe brugerkonti, til at tage kontrol med windows server - vært for databasen.,, beskyttelse af ansøgninger fra sql injektion, den første ting at gøre er at beskytte sql spørgsmål ved at gennemføre sanitization teknikker for alle oplysninger fra enhver asp anmodning objekt (anmodning request.querystring anmode. form, anmode. kager, og anmodning. servervariables).din sanitization rutiner vil variere afhængig af din dbms, men eksempler til fru sql - serveren, er angivet nedenfor., i indlogningsside eksempel manuskriptet ventede to variabler (txtusername, txtpassword) af typen snor til at blive vedtaget.når en enkelt citat indsættes i en parameter, der gør det muligt for brugeren at manipulere kommando, der bliver henrettet.for at bekæmpe truslen om sql injektion, undgå enkelt citater med erstatte funktion, som så:,,, p_strusername = erstatte (anmodning. form ("txtusername"), "'", "' '"), p_strpassword = erstatte (form (anmodning. "txtpassword"), "'", "' '"), i det andet eksempel, det forventede en variabel (id) af typen længe heltal, bliver vedtaget.uautoriseret sql kommandoer kan blive henrettet, som tilføjer sql til id - parameter.for at bekæmpe denne form for sql injektion, blot begrænse input til en lang tal med clng, som så:,,, p_lngid = clng (anmodning (id)), hvis brugeren forsøger at bestå i en snor, clng funktion vil skabe en fejl., for yderligere at mindske risikoen for sql injektion, skal du sørge for at fjerne alle de tekniske oplysninger fra kunden leveret fejlmeddelelser.fejlmeddelelser viser ofte tekniske detaljer, der kan gøre det muligt for en mand at afsløre følsomme indgangssteder.dette omfatter en skik beskeder din ansøgning giver såvel som er genereret af fejl.du kan gennemføre det med invaliderende detaljerede fejlmeddelelser i iis og ved at skabe et ikke - teknisk skik fejl sider.(for nærmere oplysninger om at skabe skik fejl sider i iis, læs: at skabe skik asp fejl sider.), endelig, for at begrænse omfanget af en sql injektion angreb, begrænse tilladelser til databasen brugerkonto webapplikationen bruger.generel anvendelse er ' t skal fødselsdato eller sa tilladelser.de mindre tilladelse til, at deres database, bedre!overveje at anvende en særskilt regnskab for hver komponent med adgang til data - kapacitet til at isolere sårbarheder.for eksempel, en offentlig grænseflade, undtagen din hjemmeside, har brug for mere begrænsede db adgang end en intern content management system.,