31. marts 2012 - 18:24Der er
11 kommentarer og 1 løsning
Login system
Hej Eksperten.
Nu har jeg siddet de sidste par timer og søgt nettet tyndt efter et ordenligt login-system. Jeg har fundet utallige scripts der ikke virkede enten fordi de bare er kodet dårligt med fejl, eller er blevet forældede pga. opdatering af PHP og/eller mysql. Selv her på Eksperten findes flere artikler om et login system, men hvor jeg, efter at have læst kommentarerne, kan konkludere, at scriptet er fyldt med den ene eller den anden type fejl. Er det virkelig så stort et projekt at kode sådan et system?
Jeg leder efter et system der har:
- En side til at oprette en bruger. - Et script til at logge ind, som kan sættes ind hvor som helst. - Mulighed for selv at vælge hvilke sider brugeren kan komme ind på. - Gruppering af brugere (rang 1, rang 2, rang 3) og dermed også begrænse adgangen til diverse sider alt afhængig af brugerens rang.
Hvis nogen kender et script der kan dette, som virker på de NUVÆRENDE versioner af hhv. php og mysql, vil jeg være overlykkelig!
Helst brug af sessions, men har ingen idé om hvor sikkert det er. Måske kan det inkluderes i følgende spørgsmål:
Hertil kommer så, at jeg også har set mange personer der kommenterer loginsystemernes sikkerhed. Så gerne at nogen evt. kunne komme med nogle pointers til hvordan man gør et loginsystem sikkert, hvis man har i mente, at systemet skal være tiltænkt et community med en masse brugere. Jeg går ud fra det er uundgåeligt med ondsindede personer der prøver at hacke sig ind.
Udover det kommer så valideringen af inputs. Hvilke valideringer er vigtige at have med, hvis vi antager det er felter som 'navn', 'email' og 'password' der er med at gøre? F.eks. så ved jeg, at det er godt kræve at det kun er bogstaver og tal i navn(nick), og under email skal man vel på en eller anden måde kontrollere om der er @ skrevet i feltet?
Håber nogen vil tage sig tid til at svare på en eller flere af ovenstående spørgsmål. Alle de kommentarer jeg har læst til de forskellige loginsystemer har blot konstateret hvilke fejl der foreligger i systemerne, i stedet for at komme med en reel løsning. Derfor dette indlæg der kan hjælpe med at afklare disse problemer.
jeg vil tro, at wordpress har det - der er mange muligheder for skribenter og holdsport mv... Alt andet lige, så er det lettere at bruge noget tid på at finde et standardsystem, og så køre videre på det, end at lave alt fra bunden selv.
Efter at have læst din kommentar tvivler jeg lidt på om du har læst hele indlægget igennem(??) :-) Hvis dette er tilfældet, så søger jeg netop det du beskriver. Et standardsystem med mulighed for at bygge videre :-)
Mht. Wordpress så foretrækker jeg at lave mit eget fremfor at springe let og elegant over og bruge deres :-)
Synes godt om
Slettet bruger
31. marts 2012 - 21:45#3
Hvis du ser det nødvendigt at lave dit eget login-system, så er vi er nødt til at dele det op i nogle mindre dele.
1) Opret bruger. Her vil du som minimum have et brugernavn og kodeord. Brugernavnet kan evt. være e-mail adressen. Andre data som f.eks. navn er noget du hæfter på dine brugerdata. For at gøre brugeroprettelsen sikker kan du f.eks. bruge ssl (hvis du vil investere i et ssl certifikat). Og hvis du vil sikre brugernes kodeord (så længe de ellers er svære at gætte) i tilfælde af at din database bliver hacket, så gemmer du ikke kodeordet, men blot en hashcode (+salt). Og hvis du vil sikre dig mig bots der opretter brugere automatisk, kan du f.eks. tilføje et captcha system. Alternativt kan du kigge på OpenID, og se om deres login system er noget du synes kan bruges til dit website.
2) Validering af input. Der kan du bruge regex til at validere inputs (f.eks. e-mail for at tjekke der er et @). Som hjælp til brugeren kan du vælge at tilføje det på klienten med noget javascript inden der submittes, men det skal stadig valideres på serveren.
3) Login. Der har du kun behov for brugernavn og kodeord. Det kan du lægge på din side hvor du har lyst. Og hvis du har gemt kodeordet som en hashcode i din database, så skal du bare lave den samme hashcode fra kodeordet der kommer ind via login og tjekke med det du har i din database. Når brugeren er logget på, gemmer du f.eks. brugernavn eller bruger id i session (og hvad du ellers har lyst til), så klarer php resten for dig (man vil ikke kunne se de data i de cookies den smider, men der er en risiko for at en session kan hijackes).
4) Bruger rettigheder. Brugeren kan f.eks. have status som almindelig bruger eller admin. Så de sider brugeren prøver at tilgå skal på en eller anden måde tjekke brugeren status (som du måske allerede har gemt i sessionen fremfor at slå det op i databasen hver gang).
I øvrigt synes jeg tit der er kommet forslag til hvordan et login system kunne laves bedre når der er blevet spurgt til det. Det er bare et spørgsmål om man selv vil gøre en indsats. :)
Og folk er velkomne til at komme med forbedringer til mit forslag.
Mange tak for dit fyldestgørende svar, det kan helt sikkert bruges og det er præcis informationer i den retning jeg søger :-) SSL og OpenID er umiddelbart ikke noget for mig. Jeg tager hellere udfordringen op og laver systemet præcis som jeg vil have det ;-)
Nu er jeg ikke den skarpeste til php, så jeg har lige nogle enkelte spørgsmål angående sessions. Når nu jeg tænker rettigheder, er det så så enkelt, at jeg bare kan lave brugerniveauer som f. eks. 1,2,3 osv. hvor 1 er administrator f. eks., og så bare skrive ind i en session på hvilket niveau man er? Og så udføre en simpel forespørgsel på hver side, der kontrollerer hvilket tal man har i databasen under brugerniveau? :-)
Udover det så siger du, at sessions kan blive hijacked. Hvor meget kan man stole på, at dette ikke sker? Bruger store hjemmesider også den type login med den risiko?
Jeg takker igen for dit fyldestgørende svar :-)
claes57
Mange tak for links de ser umiddelbart behjælpelige ud :-) Vil helt sikkert tage Captcha i brug, da det virker enkelt og ligetil, så selv jeg kan finde ud af at implementere det i mit kommende system ;-)
Synes godt om
Slettet bruger
01. april 2012 - 19:30#6
Ja, du kan sagtens gøre som du beskriver med at gemme en værdi for brugerniveauet i sessionen, og tjekke på hver side om brugeren har lov til at se denne side. Der findes sikkert smartere måder at gøre det på, hvis du har mulighed for at lade webserveren kontrollere hvilke sider en bruger må komme ind på. Men jeg har ikke så meget erfaring med det, så der kan jeg ikke hjælpe.
Mht. session hijacking, så er det også en risiko på de større hjemmesider, specielt hvis to personer er koblet på det samme (åbne) netværk og forbindelsen til websiden ikke er krypteret. F.eks. findes der et plugin til firefox som kan bruges mod Facebook: http://en.wikipedia.org/wiki/Firesheep Risikoen er nok ikke så stor, og uden at bruge ssl ville jeg se bort fra det. :)
Hey hvis du giver mig 200 point vil jeg godt lave et sæl til dig så du altid kan sette det ind på alle dine sider og det virker bar hvad siger du til det
Jeg siger mange tak for tilbuddet, men jeg fandt endelig et script der virkede, og har så selv bygget de ting på jeg ville have, så jeg nu har et velfungerende login-system :-) Men ellers tak.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.