Share to:

SQL injection

SQL injection (fra engelsk at indskyde) er et angreb rettet mod databaselaget i en applikation, ved at indskyde fjendtlig SQL kode i et SQL-kald. Angrebet udnytter en sårbarhed i håndteringen af brugerinput og databasekald. Hvis brugerens input ikke renses for specielle tegn og sætninger, kan applikationens databasekald blive manipuleret til at få en anden effekt end den ønskede. Dette kunne eksempelvis være uautoriseret administratoradgang til en websted.

SQL injection-angreb er ofte rettet mod hjemmesider med HTML-formularer, men kan rettes mod alle applikationer der har brugerinput og databasefunktionalitet.

I operationelle miljøer, er det blevet bemærket at applikationerne gennemsnitligt oplevede 71 angrebsforsøg i timen. Under angreb har nogen applikationer undertiden været oppe i et niveau, hvor de har oplevet 800-1300 angreb i timen. SQL injection tilskrives i øvrigt 83% af succesfulde hackerrelaterede brud på datasikkerheden[1].

Eksempel på et SQL injection angreb

Antag at der eksisterer en simpel HTML-formular med to inputfelter;

  • brugernavn
  • kodeord

Dette kunne eksempelvis være en login-formular til en hjemmeside.

Det indtastede fra disse felter hentes ind i variabler i serverside-miljøet, i dette eksempel defineret til PHP variablerne, henholdsvis $bruger og $kodeord.

Derefter anvendes variablerne i et databasekald til at validere det indtastede brugernavn og password op mod en tabel i databasen. Denne validering foretages vha. et SQL-kald, som kunne se ud som følger:

SELECT bruger_id FROM bruger_database WHERE brugernavn='$bruger' AND kodeord='$kodeord' ;

Under normal brug, vil kaldet returnere bruger_id, givet en bruger blev fundet i bruger_database tabellen. Hvis en ondsindet bruger derimod taster følgende ind i bruger feltet:

' or 1=1 ; --

vil SQL-kaldet se ud som følger:

SELECT bruger_id FROM bruger_database WHERE bruger=' ' or 1=1 ; --' and kodeord='$kodeord' ;

Alt hvad der står efter -- ignoreres, og tilbage står således:

SELECT bruger_id FROM bruger_database WHERE bruger=' ' or 1=1 ;

Dette kald vil returnere brugerid'et på den første og bedste bruger i databasen (ofte administratoren), og den ondsindede bruger vil dermed skabe sig adgang.

Dette eksempel er kun et ud af mange typer af SQL injection. Den ondsindede bruger kunne også forsøge at slette tabeller eller databaser, afsløre brugernavne og kodeord eller andet.


Sikring mod SQL injection

Der er flere forhold, en udvikler kan tage for at undgå at blive offer for et SQL injection-angreb. Først og fremmest bør ALT input renses for visse tegn. Visse specialtegn bør enten filtreres helt fra, eller konverteres (escapes), så de ikke behandles aktivt, men bliver gemt, som det tegn de repræsenterer.

For at begrænse et eventuelt angreb, er det desuden også vigtigt, at den bruger, der er forbundet til databasen, ikke har flere rettigheder end nødvendigt. Et login-script som det i eksemplet, behøver for eksempel ikke have adgang til at slette rækker, tabeller eller databaser, og det bør reflekteres i de rettigheder databasebrugeren har.

Noter

  1. ^ SQL Injection by the numbers set 15. maj 2012

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya