Hvorfor er denne kodesnutten en sikkerhetsrisiko?

Mr Vest

Sjefen over alle sjefer!
Dette her har jeg egentlig fått et delvis svar på tidligere, men jeg forstår det ikke lenger. Nå som jeg etterhvert begynner å forstå mer og mer forstår jeg nemlig ikke hvorfor den er en sikkerhetsrisiko.

$kode=mysql_query("select kode from koder where id = '$_GET[id]'",$c);
while($koden=mysql_fetch_array($kode))
{
echo'
Koden din er '.$koden[kode].'. Denne kan du ikke bruke til noe som helst.
';
}

Jeg har her blitt fortalt at dette rett og slett er et alvorlig sikkerhetshull. Såpass alvorlig at det kan gi brukeren full tilgang til databasen min. Hvorfor? Et eksempel på hva jeg kan skrive inn som getvariabelen for å gjøre noe greier ville vært veldig bra.
 

Keanu

Geek
Det første som slår meg er at du henter ut en kode fra databasen basert på en GET-parameteren "id", helt uten å sjekke hva som ligger i denne variabelen. Jeg tipper man skal trykke på en link eller skjema som sender med denne variabelen.

Derimot kan man med rimelig enkle grep endre den variabelen som sendes med i "id" til det man selv vil. Dette fører det et klassisk SQL injection-angrep. La oss si at brukeren av siden din endrer "id"-parameteren til "1; drop table koder;" Da vil sql-spørringen du kjører være "select kode from koder where id = 1; drop table koder;", noe som potensielt kan slette tabellen din. Slik kan en bruker kjøre en vilkårlig sql-spørring for å legge til brukere, slette, endre og legge til data og så videre.

Du må ikke stole på at det du får i id-parameteren er trygt å kjøre rett inn i en spørring. Du må "vaske" det for å sikre at det ikke er uønsket innhold.

Håper det var noe oppklarende. :)
 

Mr Vest

Sjefen over alle sjefer!
Takk for eksempel Keanu. Jeg trodde ikke det var mulig å legge inn slikt inne i f.eks Select jeg, men om det faktisk er mulig forstår jeg så absolutt at det er en sikkerhetsrisiko ja. Takk. :)

@Skogtrollet: Det er kult for deg at du kan XSS. Desverre kan ikke jeg det, og ikke vil jeg lære meg det før jeg får skikkelig bruk for det heller. At jeg lurer på 1 liten ting innen det språket syns jeg ikke krever at jeg skal lære meg hele språket.

Derfor syns jeg det er totalt unødvendig at du henviser til Google hver eneste gang du leser at noen spør om noe innen XSS. Når du allerede skal bruke tid på og be folk søke i Google, da kan du heller bruke samme tid på og gi et svar på spørsmålet, evt ikke svare i det hele tatt.

Hvordan tror du egentlig resultatene i Google hadde vært dersom alle gjorde som deg, og kom med slike elendige svar?
 

Keanu

Geek
Er en stund siden jeg har jobbet direkte opp mot sql, og ser at "mysql_query" ikke støtter multi-spørringer (slik jeg har lagt opp til i eksempelet). Det ville derfor trolig ikke vært noen fare med akkurat dette eksempelet.

Poenget er å ikke stole på verdiene du får fra $_GET. For eksempel vil id="1' OR '1' = '1" vise alle kodene som ligger i databasen. Fant ikke i farten noen eksempler på hvordan man kan manipulere data i databasen din med dette eksemplet.
 
Sist redigert:
@Skogtrollet: Det er kult for deg at du kan XSS. Desverre kan ikke jeg det, og ikke vil jeg lære meg det før jeg får skikkelig bruk for det heller. At jeg lurer på 1 liten ting innen det språket syns jeg ikke krever at jeg skal lære meg hele språket.

Derfor syns jeg det er totalt unødvendig at du henviser til Google hver eneste gang du leser at noen spør om noe innen XSS. Når du allerede skal bruke tid på og be folk søke i Google, da kan du heller bruke samme tid på og gi et svar på spørsmålet, evt ikke svare i det hele tatt.

Hvordan tror du egentlig resultatene i Google hadde vært dersom alle gjorde som deg, og kom med slike elendige svar?

Elendig svar? Hva i alle dager er det du babler om nå?

Det er ingen som har sagt at du skal lære et språk. Hadde du tatt deg tid til å google XSS, hadde du visst at det ikke er et språk i det hele tatt. XSS er en forkortelse for cross-site scripting, altså fiendtlige angrep på nettsidene dine gjennom sikkerhetshull på siden. Slik som det du beskriver her, altså.

Du lurer på hvordan sikkerhetshull på sidene dine kan skade sidene, men åpenbart uten at du vet at dette kalles xss og sql injection. Skogtrollet opplyser deg om hva dette heter sånn at du kan google det, og du svarer med å skjelle ham ut etter noter? Du hadde fått utrolig mange gode svar ved å google nøyaktig det han sier at du skal google, eller til og med ved å slå opp xss i Wikipedia. Men så lenge Skogtrollet ikke siler ut nøyaktig det du lurer på akkurat nå og skriver en fyldig gratisrapport til deg om dette slik at du slipper å bry deg med all informasjonen du kanskje får stor bruk for i morgen men som du ikke helt tror på at er nødvendig i dag og slik at du kan fortsette å holde deg for ørene og late som om XSS og sikkerhet er _språk_ og at du ikke har bruk for å lære det til tross for at det er noe av det aller viktigste en må kunne som webmaster, skjeller du ham ut for å være en fusentast og en skitten synder som ødelegger Google?

Du fikk hjelp. GOD hjelp. Og du valgte å ta imot denne hjelpen som en drittsekk og en ignorant tulling. Jeg spør meg sterkt hvorfor.
 

Mr Vest

Sjefen over alle sjefer!
olafmoriarty skrev:
Og du valgte å ta imot denne hjelpen som en drittsekk og en ignorant tulling. Jeg spør meg sterkt hvorfor.

Siden du spør deg selv hvorfor jeg tok imot denne hjelpen som en drittsek og en ignorant tulling kan du sikkert finne ditt egen svar på det også. Om du derimot heller vil velge og spørre meg om hvorfor jeg kom med det svaret jeg gjorde, så kan jeg jo helt klart også skrive en liten begrunnelse for nettopp det.

Når det gjelder min uttalelese om at XSS er et språk, så er det nettopp den informasjon jeg selv har fått høre. Jeg Googlet ikke informasjonen, men tok det jeg selv har fått høre for god fisk. Det pleier jeg stort sett og gjøre inntil det motsatte er bevist. - Noe det muligens er etter du har skrevet innlegget ditt over, olafmoriarty. Da skal det nå nevnes at jeg enda ikke har dratt meg innom Google og søkt etter hva Skogtrollet sa.

Ja, jeg fikk god hjelp. - Men ikke av Skogtrollet. Jeg fikk god hjelp av Keanu. Hvor mye god hjelp tror du jeg hadde fått dersom jeg hadde søkt i Google, og hvert eneste diskusjonsforum jeg kom over inneholdt "Søk på på Google så finner du svaret?" At jeg får lese litt informasjon om emnet i Wikipedia kan være en ting, men hvor langt tror du en nybegynner innenfor området kommer uten og kunne se et eneste eksempel - Fordi hvert eneste menneske der ute skriver "Søk på Google." ?

Jeg ser heller ikke på informasjonen jeg har bedt om som nødvendig. Jeg har aldri bedt om noen stor gratis-rapport heller. Jeg har bedt om et eksempel på hva som egentlig gjør dette til en sikkerhetsrisiko. - Hva jeg kan legge inn i variabelen som kan skade min database. Hvordan du klarer og se for deg en "fyldig gratisrapport" etter et slikt spørsmål undrer jeg virkelig på, men jeg skal ikke spørre deg. Du skal helt klart få lov til å tenke det om det er det du ønsker.

Hvor du har lest at jeg kaller Skogtrollet for en "Fusentast" og "Skitten" synder undrer jeg meg også på. Verken "Fusentast," "Skitten," og "Synder" er ord jeg selv aldri bruker, men joda, dersom du velger å leve i den tro at det er mine tanker om Skogtrollet, be my guest. Jeg skal ikke nekte deg det. Vi lever da tross alt i et fritt land. - Enn så lenge. Jeg regner da inderlig med at Skogtrollet selv ikke noen steder inne denne tråden klarer å se at jeg kaller ham for ordene du så pent har plukket ut for meg.

Ja, jeg mener at innlegg type "Søk i Google" ødelegger søkeresultatene. Hvordan tror du egentlig søkeresultatene ville sett ut dersom alle kom med slike svar? Det er innlegg som Keanu har kommet med over som f.eks kan gjøre en tråd til nyttig for også andre enn bare trådstarter selv. Selv pleier jeg også å legge inn en link og anbefale Google, men ikke uten at jeg legger med noe ekstra informasjon. Skogtrollet har lagt ved ekstra informasjon, og nettopp det er årsaken til at jeg ikke engang vurderte og gi ham noe negativt ryktepoeng for innlegget hans. Derimot skulle innlegget hatt mer informasjon, slik som Keanu sine innlegg. Da blir det et bra innlegg.
 
Sist redigert:

Zolic

Medlem
Orket ikke lese alt som sto i de forigje posten, da det så ut til å være ganske utbetydelig opp mot trådens hensikt.

Under er hvertfall mitt svar, men det er ikke et lite team du er inne på her.. Så ønsker du mer informasjon finnes det allerede på nettet... Jeg har også skrevet en del artikler på norsk om emnet som jeg heller vil henvise deg til, enn at jeg copy&paster det inn her.

men uansett det raskesvaret:

Kode:
// ved å bruke $_GET[id] direkte, så åpner du for SQL-injecion 
// det vil si at brukeren kan endre hvilken dataen han får ut, i om ikke også ha mulighet til å endre selve dataens om er lagret i databasen.
// Det er mange risikoer ved SQL-injection, men bare de som er nevnt over burde være grunn nok til å rette det.
//
// Løsning: Sjekk at $_GET[id] bare innholder det du ønsker, mest sannsynelig tall(?)
//			Dette kan gjøres enklest med en is_int($_GET[id])
//			Merk at dette ikke gir full beskyttelse, og jeg ville faktisk anbefale deg å laste ned I/O NS lett.(finner du på nettsikkerhet.no)

$kode=mysql_query("select kode from koder where id = '$_GET[id]'",$c); 
while($koden=mysql_fetch_array($kode))
{
echo'
Koden din er '.$koden[kode].'. Denne kan du ikke bruke til noe som helst.
';
}
 
Topp