y0y0y Skrevet 25. november 2011 Del Skrevet 25. november 2011 (endret) |||||||||||||||| Endret 18. januar 2012 av y0y0y Lenke til kommentar
slacky Skrevet 25. november 2011 Del Skrevet 25. november 2011 (endret) //mysql userdb inneholder: - brukernavn - passord - rettighet //1(bruker) - 2(mod) - 3(admin) systemet bygd opp på 5 linjer. //kalde til databasen: $q=mysql_query("select * from db_users WHERE user_name='$_COOKIE[user_name]'"); $a=mysql_fetch_array($q); define("iADMIN", $a['user_level'] >= 3 ? 1 : 0); //admin define("iMOD", $a['user_level'] >= 2 ? 1 : 0); //moderator define("iUSER", $a['user_level'] >= 1 ? 1 : 0); //user //Eksempel bruk: echo "Dette kan ALLE se (gjester også)!"; if (iADMIN) { echo "Dette kan bare admin se!"; } else if (iUSER) { echo "Dette kan ALLE som er brukere se (ink. admin og mod)!"; } if (iUSER and !iADMIN) { echo "Alle brukere & moderator, ikke admin."; } kallingen til databasen forutsetter bare at du bruker cookies (i denne koden), og ikke session. Men er selvfølgelig bare å endre etter bruk. Endret 25. november 2011 av warpie Lenke til kommentar
y0y0y Skrevet 25. november 2011 Forfatter Del Skrevet 25. november 2011 //mysql userdb inneholder: - brukernavn - passord - rettighet //1(bruker) - 2(mod) - 3(admin) systemet bygd opp på 5 linjer. //kalde til databasen: $q=mysql_query("select * from db_users WHERE user_name='$_COOKIE[user_name]'"); $a=mysql_fetch_array($q); define("iADMIN", $a['user_level'] >= 3 ? 1 : 0); //admin define("iMOD", $a['user_level'] >= 2 ? 1 : 0); //moderator define("iUSER", $a['user_level'] >= 1 ? 1 : 0); //user //Eksempel bruk: echo "Dette kan ALLE se (gjester også)!"; if (iADMIN) { echo "Dette kan bare admin se!"; } else if (iUSER) { echo "Dette kan ALLE som er brukere se (ink. admin og mod)!"; } if (iUSER and !iADMIN) { echo "Alle brukere & moderator, ikke admin."; } kaldingen til databasen forutsetter bare at du bruker cookies, og ikke session. Men er selvfølgelig bare å endre etter bruk. Hmm. Hadde det ikke funket med den klassiske session? if($_SESSION['username'] == "Admin") Denne funket hos meg. Men når jeg skulle bytte ut [username] med Tabellen [admin] Så går det ikke if($_SESSION['admin'] == "1") Lenke til kommentar
ZeRKoX Skrevet 25. november 2011 Del Skrevet 25. november 2011 Du bør absolutt bruke sessions, da den løsningen med coocies har et svært sikkerhetshull. Bare endre navn i cookie fila, så har du admintilgang. Anbefaler og å lese deg litt opp på mysql_injections angrep. Lenke til kommentar
Tom_ Skrevet 25. november 2011 Del Skrevet 25. november 2011 har du husket å skrive noe sånt som: session_start(); $_SESSION['admin'] = $row[admin]; Lenke til kommentar
y0y0y Skrevet 25. november 2011 Forfatter Del Skrevet 25. november 2011 har du husket å skrive noe sånt som: session_start(); $_SESSION['admin'] = $row[admin]; Den funker da ikke? hmm Lenke til kommentar
slacky Skrevet 25. november 2011 Del Skrevet 25. november 2011 (endret) Har da ikke merket noe sikkerhetshull ved cookies, sett bort i fra at du lagrer kakene på PC-en... Gi gjerne link til noe lesestoff, om det ikke er det du snakker om da. :For det bryr meg langt i analen. Men for all del bruk session, spiller da ingen rolle (sett bort i fra det du sier). har du husket å skrive noe sånt som: session_start(); $_SESSION['admin'] = $row[admin]; Det har ingen betydning.. Er ikke noe kode der $row, er sikkert $row=mysql_fetch_array($mysql_query); -> $_SESSION['admin'] Hvor session også lagrer rettighetene (dette blir en unødvendig lang kode om det skal fungere)... Bruk da koden jeg viser til, den er fungerende. Endre etter behag. Endret 25. november 2011 av warpie Lenke til kommentar
y0y0y Skrevet 25. november 2011 Forfatter Del Skrevet 25. november 2011 Har da ikke merket noe sikkerhetshull ved cookies, sett bort i fra at du lagrer kakene på PC-en... Gi gjerne link til noe lesestoff, om det ikke er det du snakker om da. :For det bryr meg langt i analen. har du husket å skrive noe sånt som: session_start(); $_SESSION['admin'] = $row[admin]; Det har ingen betydning.. Er ikke noe kode der $row, er sikkert $row=mysql_fetch_array($mysql_query); -> $_SESSION['admin'] hvor da session som er lagret sier rettighetene... Bruk koden jeg viser til, den er effektiv. Endre etter behag. Hø. Er dette sikkert da? Noen andre forslag som er bedre? Lenke til kommentar
Jonas Skrevet 25. november 2011 Del Skrevet 25. november 2011 (endret) Har da ikke merket noe sikkerhetshull ved cookies, sett bort i fra at du lagrer kakene på PC-en... Gi gjerne link til noe lesestoff, om det ikke er det du snakker om da. :For det bryr meg langt i analen. Du påstår at du har laget crawlere, store CMSer, SMS-løsninger og SSH-terminaler, men du forstår virkelig ikke hvordan kodesnutten du postet er vidåpen for angrep? Er du så lite kjent med internett at du ikke vet at man med stor enkelthet selv kan endre innholdet i cookies? Med en sikkerhetsløsning inspirert av dine kode, så vil man øyeblikkelig kunne få administrasjonstilgang. Endret 25. november 2011 av Jonas 1 Lenke til kommentar
slacky Skrevet 25. november 2011 Del Skrevet 25. november 2011 (endret) Okei. Takk for den, den trengte jeg sikkert Nå vet jeg det, også.. Så ikke over koden, før du nevnte det. Kaker kan dog bli rimelig sikre å bruke, ved å være forsiktig.. XchangeX Koden er ikke sikker uten vidre modifisering. I koden kan de enktelt bare endre kaken til å inneholde admins brukernavn. Dermed bli admin. Du bli iallefall nødt til å koble opp til sql med passordet også... Endret 25. november 2011 av warpie Lenke til kommentar
y0y0y Skrevet 25. november 2011 Forfatter Del Skrevet 25. november 2011 Okei. Takk for den, den trengte jeg sikkert Nå vet jeg det, også.. Tror dog ikke at de skal få så mye til hvis du sikrer kaken, stripper den for tegn og slik. Tilater bare a-zA-Z0-9.. (preg_match). Får meg ikke til å tro at den ikke er sikker om du kjører normale prosedyrer over den. Noe jeg gjør. XchangeX Bare bruk koden, men endre til session, får sikkerhets skyld. Jeg har vært borte i mye enklere og bedre kode en dette xD Men husker den ikke ^^, Finnes det ikke noe lettere? Ville lett tro det:) Lenke til kommentar
slacky Skrevet 25. november 2011 Del Skrevet 25. november 2011 //kalde til databasen: $q=mysql_query("select * from db_users WHERE user_name='$_SESSION[user_name]' AND user_name='$_SESSION[user_pass]'"); $a=mysql_fetch_array($q); define("iADMIN", $a['user_level'] >= 3 ? 1 : 0); //admin Blir da ikke enkelere - Nå vet jeg ikke om en kan endre session-innhold.. Om så da må det til med sikkerhet her. For å få tips til sikkerhet googler du "SQL injection". Lenke til kommentar
ZeRKoX Skrevet 25. november 2011 Del Skrevet 25. november 2011 (endret) Bare for å enkelt forklare litt hvorfor det er så krise å bruke cookies slik som vis i eksempel lenger opp, så skal jeg kort prøve å forklare den største forskjell mellom cookie og session. Det store problemet med brukeridentifikasjon på nettsider, er at kontakten med klienten er stateless. Det vil si at du ikke holder kontakt med klienten mellom de tidspunktene klienten laster nye sider. Det kan derfor, fra webserverens synsvinkel, være to helt forskjellige brukere som laster en side, selv om det er samme nettleserøkt. Når du velger å lagre en verdi i en cookievariabel, gir du beskjed til klienten om å lagre denne variabelen i klartekst i en tekstfil hos klienten. Klienten vil deretter sende med denne tekstfilen hver gang du ber om en ny nettside. Dersom du, som i eksempelet over, lagrer brukernavnet i en cookie, så vil klienten lagre dette i en tekstfil. Neste gang klienten ber om en ny nettside, sender klienten med denne filen, og serveren leser brukernavnet, og antar dermed at dette er en bruker som er pålogget. Problemet med det hele, er at brukeren kan endre denne tekstfilen til å inneholde brukernavnet til en administrator. Webserveren vil så anta at det er en administrator, og gi tilgang til funksjoner deretter. Når du derimot lagrer en en verdi i en sessionvariabel, lagres denne verdien på en tekstfil på serveren, som blir identifisert med en 'random' ID. Denne ID-en blir deretter sendt til klienten, og lagret som en cookie. Hver gang nettleseren ber om en ny nettside, sendes denne ID-en med. Dette blir mye sikrere enn eksempelet med cookies, siden det som lagres hos brukeren bare er en lang ID. Dersom brukeren endrer denne ID-en, vil han bli utlogget, med mindre han er så forbasket heldig at han treffer ID-en til en annen innlogget bruker. En svakhet her er det som heter "Session hijacking". Dersom du snapper opp ID-en til en annen pålogget bruker, så kan du ta over hans bruker, men dette er vesentlig vanskeligere enn å bare endre et brukernavn i en tekstfil. Håper det var litt oppklarende EDIT: Kom visst noen poster imens jeg skrev denne posten... Er ikke når du bruker en sessionvariabel, at du trenger å bry deg med sql-injections. Men, brukernavnet vil en gang bli tastet inn av en bruker. Da må du passe på å escape farlige karakterer... Endret 25. november 2011 av ZeRKoX Lenke til kommentar
y0y0y Skrevet 25. november 2011 Forfatter Del Skrevet 25. november 2011 //kalde til databasen: $q=mysql_query("select * from db_users WHERE user_name='$_SESSION[user_name]' AND user_name='$_SESSION[user_pass]'"); $a=mysql_fetch_array($q); define("iADMIN", $a['user_level'] >= 3 ? 1 : 0); //admin Blir da ikke enkelere - Nå vet jeg ikke om en kan endre session-innhold.. Om så da må det til med sikkerhet her. For å få tips til sikkerhet googler du "SQL injection". define("iADMIN", $a['user_level'] >= 3 ? 1 : 0); //admin Hvor er ting plassert her? Hva mener du med IADMIN? xD Lenke til kommentar
slacky Skrevet 26. november 2011 Del Skrevet 26. november 2011 (endret) Hjertelig mange takk ZeRKoX, du skriver klart og oversiktelig, det skal du ha! Men da tenker jeg det er rimelig safe om jeg bruker en cookie som inneholder både brukernavn, og passord.. EG: Jarlholta.mYp4ssw0rd.. Splitter dem slik: $cookie_vars = explode(".", $_COOKIE['user']); $userBad = preg_match("/[^0-9A-Za-z\_]/i", $cookie_vars['0']); $passBad = preg_match("/[^0-9A-Za-z\_]/i", $cookie_vars['1']); if($userBAD != 1 AND $passBAD != 1) { $q=mysql_query("select * from db_users WHERE user_name='".$cookie_vars['0']."' AND user_name='".$cookie_vars['1']."'"); $a=mysql_fetch_array($q); }else { echo "Du prøver deg?? "; } Gjør noe ala det selv, men på en annen måte, det burde være sikkert XchangeX iADMIN skjekker bare om du er admin. Bruker det slik: //Eksempel bruk: if (iADMIN) { echo "Dette kan bare ADMIN se!"; } Husk å lage et felt i databasen som heter user_level (tinyint). Hvor du gir deg selv tallet 3, og har 1 eller 0 som default. Endret 26. november 2011 av warpie Lenke til kommentar
Jonas Skrevet 26. november 2011 Del Skrevet 26. november 2011 (endret) $cookie_vars = explode(".", $_COOKIE['user']); $userBad = preg_match("/[^0-9A-Za-z\_]/i", $cookie_vars['0']); $passBad = preg_match("/[^0-9A-Za-z\_]/i", $cookie_vars['1']); Hvorfor bedrive så lite hensiktsmessig validering? Skal en bruker liksom ikke kunne benytte spesielle tegn i passordet sitt? Bruk heller funksjoner som er ment for å gjøre oppgaven du ser ut til å ønske å gjøre, nemlig mysql_real_escape_string. Samtidig er det helt meningsløst å putte to verdier i samme cookie - opprett heller flere. Til slutt er det verdt å nevne at cookiedata vanligvis sendes i klartekst og å lagre passord der er helt forferdelig lite lurt. Endret 26. november 2011 av Jonas 1 Lenke til kommentar
Tom_ Skrevet 26. november 2011 Del Skrevet 26. november 2011 $cookie_vars = explode(".", $_COOKIE['user']); $userBad = preg_match("/[^0-9A-Za-z\_]/i", $cookie_vars['0']); $passBad = preg_match("/[^0-9A-Za-z\_]/i", $cookie_vars['1']); Hvorfor bedrive så lite hensiktsmessig validering? Skal en bruker liksom ikke kunne benytte spesielle tegn i passordet sitt? Bruk heller funksjoner som er ment for å gjøre oppgaven du ser ut til å ønske å gjøre, nemlig mysql_real_escape_string. Samtidig er det helt meningsløst å putte to verdier i samme cookie - opprett heller flere. Til slutt er det verdt å nevne at cookiedata vanligvis sendes i klartekst og å lagre passord der er helt forferdelig lite lurt. Noen sider har en funksjon som "Husk Meg", som husker brukernavnet og passordet til neste gang. Blir denne informasjonen lagret som cookie på klientens maskin ? Lenke til kommentar
Nickless Skrevet 26. november 2011 Del Skrevet 26. november 2011 $cookie_vars = explode(".", $_COOKIE['user']); $userBad = preg_match("/[^0-9A-Za-z\_]/i", $cookie_vars['0']); $passBad = preg_match("/[^0-9A-Za-z\_]/i", $cookie_vars['1']); Hvorfor bedrive så lite hensiktsmessig validering? Skal en bruker liksom ikke kunne benytte spesielle tegn i passordet sitt? Bruk heller funksjoner som er ment for å gjøre oppgaven du ser ut til å ønske å gjøre, nemlig mysql_real_escape_string. Samtidig er det helt meningsløst å putte to verdier i samme cookie - opprett heller flere. Til slutt er det verdt å nevne at cookiedata vanligvis sendes i klartekst og å lagre passord der er helt forferdelig lite lurt. Noen sider har en funksjon som "Husk Meg", som husker brukernavnet og passordet til neste gang. Blir denne informasjonen lagret som cookie på klientens maskin ? Ja. http://www.webdesign.org/web-programming/php/cookies-remember-me.9107.html Lenke til kommentar
ZeRKoX Skrevet 26. november 2011 Del Skrevet 26. november 2011 Men det skal nevnes at det er _veldig_ uvanlig, og skikkelig stygt å lage bruernes passord i klartekst i en cookie. Men du kan lagre en hasj eller lignende, som du kan bruke til å sjekke at brukeren er pålogget, eller sjekke om brukeren har huket av "husk meg" Lenke til kommentar
Nickless Skrevet 27. november 2011 Del Skrevet 27. november 2011 Men det skal nevnes at det er _veldig_ uvanlig, og skikkelig stygt å lage bruernes passord i klartekst i en cookie. Men du kan lagre en hasj eller lignende, som du kan bruke til å sjekke at brukeren er pålogget, eller sjekke om brukeren har huket av "husk meg" Godt poeng, ihvertfall med tanke på eventuell cookiestealing. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå