Avatar billede m_bold Praktikant
23. maj 2008 - 13:12 Der er 6 kommentarer og
2 løsninger

Hvad er XSS vulnerability og SQL injection?

Hej.

Jeg er blevet hacket. Jeg har fundet ud af, at min hjemmeside har to svagheder: XSS vulnerability og SQL injection.

Men kan nogle forklare mig, hvordan dette virker i praksis og hvordan undgår man bedst at det sker fremover?
Avatar billede w13 Novice
23. maj 2008 - 13:17 #1
SQL injection kan f.eks. være, hvis du har SQL-sætningen:

strSQL = "SELECT * FROM table WHERE brugernavn='"&username&"'"

Hvis username så indeholder:

' OR '1'='1

Så vil din SQL blive:

"SELECT * FROM table WHERE brugernavn='' OR '1'='1'"
Avatar billede pidgeot Nybegynder
23. maj 2008 - 13:29 #2
XSS vulnerability betyder at en bruger kan på den ene eller anden måde få valgfri HTML skrevet på en side, og dette kan ses af andre. Hans HTML kan så bruge JavaScript til eks. at få fat på andre brugeres cookies, m.v., hvilket kan gøre ham i stand til at udgive sig for at være dem.

Du sikrer dig mod XSS ved at sørge for at en bruger aldrig nogensinde kan komme til at skrive egentlig HTML - dette gøres ved at konvertere de specielle tegn (<, >, & og ") til HTML-entiteter inden de udskrives. Kan du ikke komme uden om en vis grad af HTML, så skal du parse det der bliver indsat, og filtrere alle de tags og attributter væk som du ikke kan placere på en whitelist.

En god måde at tilbyde brugere at formatere noget tekst de skriver, uden at de kan fuske for meget, er at bruge et BBCode-agtigt system, og så foretage escaping inden man fortolker BBCoden ved output.

SQL injection er det at tilføje sin egen SQL til en given SQL-sætning der køres på serveren. Det kan eks. bruges til at logge ind uden at man skal kunne kodeordet, ændre eller slette diverse ting i databasen, m.v..

Et eksempel kunne være login. Lad os sige en bruger logger på med brugnavnet "foo" og kodeordet "bar", og du sætter strenge sammen for at skabe denne SQL-sætning:
SELECT * FROM users WHERE username='foo' AND password='bar'

Hvis du ikke håndterer specielle tegn, såsom ', så kan jeg skrive "' OR '1'='1" som kodeord, hvilket vil give følgende SQL:
SELECT * FROM users WHERE username='foo' AND password='' OR '1'='1'
og jeg kan komme ind, fordi den ekstra betingelse gør at username og password ikke behøver matche - '1'='1' bliver evalueret for hver række, og vil altid blive sand.

For PHP gælder det at hvis du bruger mysql_query, er angrebsmulighederne lidt mere begrænsede, da den filtrerer ekstra queries efter den første fra - men det er ikke det samme som at du er sikret.

Nødløsningen mod SQL injection er at escape input med eks. mysql_real_escape_string (eller tilsvarende for dit databasesystem), men der kan være fejl i escaping-funktionen, hvilket gør at man alligevel kan slippe gennem (og det har der sågar også været i bl.a. MySQL). Den rigtige løsning er derfor at bruge parameters - på den måde behandles værdierne separat fra SQL'en, hvilket gør injection umulig.

De fleste database-libraries understøtter parameteriserede SQL-sætninger, med undtagelse af mysql_* i PHP - her skal mysqli_*-funktionerne benyttes i stedet.
Avatar billede frand Nybegynder
23. maj 2008 - 15:09 #3
XSS kan også komme gennem lidt mere usynlige funktioner. Jeg faldt f.eks. over en BBCode parser den anden dag, som er pivåben. http://www.eksperten.dk/spm/767725 der kan man også manipulere lidt med apostrofferne
Avatar billede m_bold Praktikant
30. juli 2008 - 15:35 #4
Tak for jeres input. Smid alle et svar, så deler I points'ne.
Avatar billede w13 Novice
30. juli 2008 - 15:35 #5
;)
Avatar billede pidgeot Nybegynder
30. juli 2008 - 16:32 #6
Værsgo :)
Avatar billede m_bold Praktikant
30. juli 2008 - 17:02 #7
pidgeot -> det var en kommentar, prøv med svar
Avatar billede pidgeot Nybegynder
30. juli 2008 - 17:03 #8
Whoops ^_^;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester