Arne Skrevet 12. januar 2007 Skrevet 12. januar 2007 Hei! Eg har laga meg eit kontrolpanel. Eg lærer mykje av det, det er ein av grunnane til at eg har laga det. Har de råd til kva eg kan ha på det? Eg har allereie laga innlogging, gjestebok, funksjon for adding av nyheter, funksjon for lesing av nyheter, utlogging og tillegging av nye brukarar. Alt opererer opp mot ein database. Eg føler at sikkerheten er ganske svak. Alle inputs blir "scanna" av htmlentities() og htmlspecialchars(). Kva kan eg meir gjere? Når ein har logga på, vert ein session true. På kvar side skjekkar eg om sessionen er true. Viss han ikkje er det, får du feilmelding. Eg går ut frå at dette er ganske spinkelt... Eg har jo ein database, og alle brukarar sin siste ip vil verte lagra der, så eg er ganske bra oppdatert på ipen til folk som loggar inn. Då kan eg spore opp evt. dobbeltbrukarar. Eg håpar på innspel.
ze5400 Skrevet 12. januar 2007 Skrevet 12. januar 2007 Sjekker du også brukerklassen på hver side? Sjekk alltid brukernavn, brukerid, ip og brukerklasse opp mot databasen på hver side.
Arne Skrevet 12. januar 2007 Forfatter Skrevet 12. januar 2007 (endret) Sjekk alltid brukernavn, brukerid, ip og brukerklasse opp mot databasen på hver side. Kva skal eg sjekke? Kan du forklare? Eg har ikkje brukerklasser endå, men det kan eg fikse. Endret 12. januar 2007 av Fjott
ze5400 Skrevet 12. januar 2007 Skrevet 12. januar 2007 (endret) Hvordan jeg gjør det: 1: Sjekk om det er en kjeks på klienten. Hvis det er det, sjekk med sessions i databasen hvorvidt ipen på klienten, tiden inlogget og brukernavnet (de to siste er lagret i kjeksen) stemmer med sessions. Hvis de gjør det. Sjekk med databasen hvilke brukerrettigheter brukeren har. Om det er ok, slipp inn. 2: Ingen kjeks nei. Be om innlogging. Hvis bruker og pass stemmer, skriv kjeks, samt legg til en oppføring i session i databasen. EDIT: Med denne metoden kan jo såklart folk med fysisk adgang stjele kjeksen, men den vil kun virke lokalt på lanet. Endret 12. januar 2007 av ze5400
Arne Skrevet 13. januar 2007 Forfatter Skrevet 13. januar 2007 Eg skal prøve på det. No prøver eg å lage ein funksjon der ein kan regulere tilgangen med adgangstrinn. F. eks. skal kun trinn 1 legge til brukarar, dei skal kunne gjere alt. Trinn to skal kunne administrere gjesteboka og legge til artikler, og trinn 3 skal kun kunne legge til artikler. Eg har prøvd å lage denne funksjonen. function access_level($access_level) { $username = $_SESSION['username']; $query3 = "SELECT access_level FROM users WHERE username = '$username'"; if(mysql_query($query3) == "$access_level") return true; else return false;} Vil dette i teorien virke? Det forutsetter jo at ein er tilkopla til databasen. access_level i databasen er varchar. Eg kunne tenke meg å berre kjøre denne funksjonen på kvar side. Det er lenge sidan eg laga mine eigne funksjonar, så det er sikkert ikkje rett. Kva kan eg gjere? Kunne tenke meg å kunne gjere dette på kvar side: if (access_level(1)) { //Det brukaren skal få tilgang til } else die; Nokon moglegheit for å gå det til?
ze5400 Skrevet 13. januar 2007 Skrevet 13. januar 2007 Hvis du har en fil som importeres i alle (functions.php elsn), kan du deklarere arrayen $CURUSER, som du fyller med all info om inlogga bruker. Så på toppen av hver fil trenger du global $CURUSER;. i functions.php definerer du også brukerklassene, for å forenkle arbeidet ditt. Kan se slik ut f.eks. define("UC_USER", 0); define("UC_MODERATOR", 1); define("UC_ADMINISTRATOR", 2); så for å finne ut om en bruker har tillatelse: if ($CURUSER['class'] >= UC_BRUKERKLASSE){ }else die();
Arne Skrevet 13. januar 2007 Forfatter Skrevet 13. januar 2007 Det høyrtes jo bra ut. Korleis skal eg fylle den assosiative matrisa (arrayet) med det brukaren har tasta inn?
ze5400 Skrevet 13. januar 2007 Skrevet 13. januar 2007 (endret) Etter brukeren er autentifisert får du tak i brukeriden. if (loggedin()){ $CURUSER = mysql_query("SELECT * FROM users WHERE id = '" getuserid() . "' LIMIT 1;"); $CURUSER = mysql_fetch_array($CURUSER) } Dette krever jo såklart at du har lagd funksjonen getuserid() og loggedin(). loggedin() skal returnere true eller false, getuserid() skal (logisk nok) returnere iden til inlogged bruker. EDIT: La til code tagg. Endret 13. januar 2007 av ze5400
Arne Skrevet 14. januar 2007 Forfatter Skrevet 14. januar 2007 (endret) Takk for ein god hjelp. Eg slit fortsatt med autensiering, men det kan eg ta seinare. Eg har no laga getuserid: function getuserid($usernamesession) { $getuseridquery = "SELECT id FROM users WHERE username = $usernamesession"; $userid = mysql_query($getuseridquery); return $userid; } ...og loggedin function loggedin() { if ($_SESSION['online']) return true; else return false; } Dette ser vel bra ut? Så deklarerer eg $CURUSER i functions.php, og fyllar han i index.php? (Rett etter han har logga in) Koden du har skrive gjer vel at alt som er i databasen vert lagra i ein assosiativ matrise, så dette skal vel kun gjerast ein gong? Eg er lettare forvirra... Korleis vert sturkturen i arrayet? Endret 14. januar 2007 av Fjott
ze5400 Skrevet 15. januar 2007 Skrevet 15. januar 2007 $CURUSER['id] returnerer id $CURUSER['username'] returnerer brukernavn o.s.v. Bare husk at før du kan bruke $GLOBAL i f.eks index.php må du require functions.php, samt huske å fortelle index.php at $CURUSER er global.
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å