Tilbakemelding på Gaveland.com - Cashbackside.! PHP Sikkerhet

En tråd i 'PHP, SQL og databaser' startet av Mr Vest, 18 Aug 2009.

  1. skogtrollet

    skogtrollet Medlem

    Innlegg:
    208
    Som jeg skrev lenger oppe:

    $ref = htmlspecialchars($input, ENT_QUOTES);
     
  2. skogtrollet

    skogtrollet Medlem

    Innlegg:
    208
    PHP: htmlspecialchars - Manual

    Denne sørger for at <h1> ikke blir tolket som html kode, men <h1> blir printet ut, slik at du ser <h1>. Men den oppfører seg ikke som html kode.

    ENT_QUOTES sørger for at anførselstegn( " ) også blir skrevet om, slik at den mister betydningen sin i html kode.

    Og hvis det er kun et tall du skal ha fra brukeren. F.eks. medlem.php?id=4
    Så bruk denne:

    PHP:
    <?php

    $id 
    $_GET['id'];

    if(
    $id)
    {


        if(
    is_numeric($id))
        {

            
    /* Nå kan id trygt skrives ut. Og du kan trygt putte den inn i en sql query */
            
    echo "Du skrev inn: " $id;
        }
        else
        {
            
    /* Her kan vi ikke skrive ut tallet, fordi det kan inneholde kode */
            
    echo "det er ikke et tall!!!";    
        }


    }
    else
    {
        echo 
    "Du må skrive inn id";
    }

    ?>
    Altså,
    PHP:
    is_numeric()
    må integreres i koden din. For å sørge for at kun tall slipper gjennom.
     
    Tonny Kluften liker dette.
  3. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Takk skal du ha skogtrollet. Med tanke på at jeg har 0 erfaring på dette, så tror jeg at jeg forstår litt mer av hva og hvordan ting kan gjøres mer sikker nå.

    Jeg ser at du nevner koden som fikser dette med <h1>-taggene jeg bruker. Disse <h1>-taggene er hardkodet direkte inn i koden, f.eks print"<h1>$name</h1>";. Disse er sikker da, ikke sant?

    Denne koden du nevner med "medlem.php?id=4", da mener du altså at jeg må sørge for at "4" virkelig er et tall, og ikke skummel kode. Jeg tror jeg har klart og sette dette opp riktig nå, men allikevel får jeg et litt rart resultat.

    Når jeg skriver et tall får jeg riktig resultat, "Du skrev inn: $id". Men, når jeg skriver inn f.eks jeg_er_kul, da får jeg frem "Du må skrive inn id." Skulle det ikke etter rett da kommet frem, "det er ikke et tall!!!" ?

    Ellers er jeg veldig takknemlig for hjelpen så langt. Kanskje jeg har fått litt inn i hodet at for mye sikkerhet gjerne er bedre enn for lite. :D
     
    Sist redigert: 21 Aug 2009
  4. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Nei, i alle dager. Nå fant jeg akkurat ut at jeg ikke hadde lagt inn denne greia med ID riktig. Slik det er nå kjenner jeg nesten på gikten at jeg hvert øyeblikk legger laptopen på gulvet, tramper på den, stikker ut i garasjen og finner en øks og høgger løs på den. Attpåtil ser jeg for meg at jeg også tar med meg en kanne bensin og sjekker hvor bra den brenner etter det første er gjennomført.

    Men altså, fra alvor til spøk.

    Jeg fikk en PM med følgende URL: Gaveland.com - Gratis gavekort for alle

    I PM stod det også, "Den inputten der på filtreres. Bruk is_numeric() på tallet."

    Slik jeg forstår det etter god informasjon i tråden, så er det altså tallet 28 som må filtreres, men hvor i alle dager skal jeg filtrere tallet?
     
  5. picxx

    picxx Well-Known Member

    Innlegg:
    8.801
    Bruker ikke du samme kode som jeg bruker på en side Atle?
    Jeg skjønner ikke helt disse greiene med all denne sikkerheten.
    Hva er det liksom man kan føkke opp på siden om man bruker "offers.php?out=xx" da?
    Har da tjent noen kroner på siden, så hensikten for min del er oppnådd.
    Kan gjerne gi url til de som vil forsøke å hacke den, men ser ikke hva de kan få utav det?
     
  6. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Stemmer det Picxx. Det er samme scriptet vi bruker, og dette med sikkerheten er ikke endringer gjort av meg. Det er faktisk scriptet som er slik.. Jeg fikk PM fra skogtrollet som nevnte at dette offers.php?out=xx var et mye større sikkerhetshull enn det som er nevnt tidligere i tråden. Også derfor det gikk på PM tenker jeg.

    Noe om akkurat hva for et hull det er, det vet jeg ikke..
     
  7. skogtrollet

    skogtrollet Medlem

    Innlegg:
    208
    Det heter for "sql injection". Det vil si at jeg kan laste ned hele databasen din om jeg vil. Det inkluderer passordene.

    Så hvis man får tak i passordet, kan man logge inn som admin og fucke opp? Hvis det fins et admin panel da.
     
  8. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Hørtes jo ut som en lite bra feil, men hvordan i alle dager kan man fikse den?

    Jeg kan jo ikke kontrollere hva som skal stå oppe i adressefeltet til brukeren. Det jeg kan kontrollere er jo linkene som brukeren klikker på for og komme ut til de forkjellige ID'ene.. Filtrere noe som vises oppe i adresselinja der forstod jeg ikke helt hvordan jeg kunne gjøre.. ?

    Kan det ha noe med

    $_GET['out']=strip_tags($_GET['out']);
    $_GET['out']=mysql_real_escape_string($_GET['out']);


    og gjøre?
     
    Sist redigert: 21 Aug 2009
  9. picxx

    picxx Well-Known Member

    Innlegg:
    8.801
    Passordene på siden eller passordene til mysql databasen/phpmyadmin?

    Om det kun er passordene på siden burde jo ikke dette være noe problem ettersom passordene er hashet i databasen?
     
  10. Zolic Medlem

    Innlegg:
    52
    Noen farer ved SQL injection, det er ikke bare passordene det er mulig å få tak i... alt som er lagret i dem, personopplysninger(tlf nr, e-post, addresse, you name it), side data, transaksjons logger eller poeng systemet( om det er noe slikt?). I tillegge så kan jo data slettes eller endres...

    Passord som er hashet, men det spørs jo forsatt på kvaliteten, og det er mulig å brute force om en først har fått tak i hashen. Men styrken på passordet bestemmer tiden det vil ta, og er den bra nok vil det ta flere år å teste seg frem til et passord.


    P.S: jeg har ikke sett på noe kode, bare snakker generelt om SQL injection atm.
     
  11. skogtrollet

    skogtrollet Medlem

    Innlegg:
    208
    All data som "the current" database bruker har tilgang på, kan man ved sql injection hente ut.

    Så hvis brukeren har tilgang til mysql databasen "mysql.users", kan også bruker og passord til selve mysql databasen også hentes ut.

    Som oftest er passord i databasen kryptert. Men om du bruker et passord som fins i ordbok, kan dette crackes i løpet av 10-15 minutter.

    Bruker du et passord som er 8 tegn eller større, kan det ta en dag eller to, eller 1 år om du er heldig.
     
  12. Robert

    Robert Mr. 66

    Innlegg:
    312
  13. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Etter noen timer med søvn har jeg nå klart og finne ut hva du mente jeg måtte gjøre for og fikse dette her. Snodig er det, men noen ganger er liksom bare løsningen i hodet når jeg våkner.

    Flotte greier.! Da var det ikke nødvendig og finne noe øks eller bensin denne gang.! :)
     
  14. picxx

    picxx Well-Known Member

    Innlegg:
    8.801
    Ok, og om hosten går konkurs og legger ned mister du hele siden... fint det :eek:
     
  15. Mr Vest

    Mr Vest Sjefen over alle sjefer!

    Innlegg:
    2.079
    Hehe, jeg begynner og tenke at sannsynligheten for og faktisk få uvedkommende inn i databasen er like stor som i eksempelet til picxx her.

    Nå kunne jeg derimot tenke meg og høre om jeg har gjort noe mer riktig. Siden tråden ble startet har jeg gjort forholdsvis store forandringer selv om ikke alt sammen er like godt synlig.

    - Jeg har forsøkt og forklare bedre hva brukeren må gjøre for og få gavekort før registrering. Nederst her finner vi f.eks 4 mest populære oppgaver i systemet, slik at brukeren kan få en pekepinn på hvilken type oppgaver det finnes i systemet.

    - I brukerregistrering har jeg laget til en nedtrekksmeny hvor brukeren kan velge det gavekortet brukeren ønsker. Tidligere måtte man skrive inn navnet på gavekortet.

    - Har fikset opp i feil med linkene og $ref som tidligere var nevnt.

    - Ryddet opp i en forferdelig rotete kode.

    - Har også fått fikset opp i sikkerhet. Slik jeg ser det nå etter hva jeg har fått med meg skal det ikke være noe galt med den nå.

    - Fått alt av engelsk over på norsk. (håper jeg)

    - Skrivefeil med og/å blir fikset i løpet av dagen.

    Fremsiden av Gaveland.com – Gratis gavekort til alle.! vil jeg ikke be om tilbakemeldinger på akkurat nå. Her har jeg satt opp en blogg, og vil skrive her fordi jeg også vil dra trafikk fra søkemotorer. Der må jeg gjøre litt småsaker til før jeg kaller den ferdig. Tilbakemeldinger på den er altså ikke nødvendig.

    Ellers sikkert også litt mer småplukk. Om dere nå ser på Gaveland Norge Fremsiden, tror dere nå at det vil være en høy % som vil registrere seg en brukerkonto?
     
    Sist redigert: 22 Aug 2009

Del denne siden