Gå til innhold

!11111111111|||||||||||||||||||||||||||||||||||||


Anbefalte innlegg

Videoannonse
Annonse

//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 av warpie
Lenke til kommentar

//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

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 :p

$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 av warpie
Lenke til kommentar

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 :p

$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

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 av Jonas
  • Liker 1
Lenke til kommentar

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 av warpie
Lenke til kommentar

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

//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 :p

- 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

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 :p

 

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 av ZeRKoX
Lenke til kommentar

//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 :p

- 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

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?? :p";

}

 

Gjør noe ala det selv, men på en annen måte, det burde være sikkert :p

 

 

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 av warpie
Lenke til kommentar

$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 av Jonas
  • Liker 1
Lenke til kommentar

$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

$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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...