Opsummering af "100% sikkert login"

Tags:    php

Hej udviklinger :P

http://www.udvikleren.dk/PHP/Thread.aspx/6/23631/

Jeg har ud fra jeres hjælp sammensat et loginsystem.

Jeg vil gerne have jer til at rette de eventuelle fejl/mangler i koden før jeg begynder at sammensætte en artikel om det.

index.php
Fold kodeboks ind/udKode 


register.php
Fold kodeboks ind/udKode 


create.php
Fold kodeboks ind/udKode 


login.php
Fold kodeboks ind/udKode 


check.php
Fold kodeboks ind/udKode 


file.php
Fold kodeboks ind/udKode 


logout.php
Fold kodeboks ind/udKode 


Eksempel på dictionary.txt (lav din egen eller hent http://sam.wep.dk/moduler/Login-System/dictionary.txt )
Fold kodeboks ind/udKode 




Kode til oprettelse af SQL tabelen (du skal selv lave en database inden):
Fold kodeboks ind/udKode 


Se systemet i funktion på http://sam.wep.dk/?s=Moduler&u=Login-System



Indlæg senest redigeret d. 19.08.2009 20:42 af Bruger #10584
40 svar postet i denne tråd vises herunder
7 indlæg har modtaget i alt 7 karma
Sorter efter stemmer Sorter efter dato
hvorfor har du rettet i quote_smart til din login php, og hvorfor bruger du ikke quote_smart til den sidste query?


forbedringer:
du kan skrive LIMIT 1 på alle queries da username unikt i create. Du kan også lave username unik i din tabel. Jeg antar at begge vil stoppe gennemløb af tabellen hvis de finder bare en række.
laver en tildeling i sidste if sætning du ikke bruger til noget.


funktioner af samme navn bør altid gøre det samme uanset hvilken fil de bliver kaldt i. så undgår du at lave en fejl hvor du forventer en ting men får noget andet.



Martin:

2. Har ikke ændret.. er du sikker på at det ikk er bedst at bruge sprintf(), har bare hørt et sted

3. alle variablerne i koden er strings, så mener ikk det er så vigtigt

4. har ikk fundet nogle fejl med SQL injections endnu, så hvis man ska komme ind i systemet ska man bruge et andet indput, har leget lidt på hackthissite.org
http://www.hackthissite.org/user/view/samolesen/



Hej Sam,

Pkt. 2 go 4: sprintf() bruges hvis du vil indsætte vilkårlig data, f.eks brugernavn, i en streng som er prædifineret.

Betragt dette eksempel:
Fold kodeboks ind/udKode 


Pointen er, sprintf() bruges til data manipulation, og det eneste du ikke vil ha skal kunne ske midt i en sql sætning er nemlig data manipulation. Nu har du godt nok sikret dig lidt med din qoute_smart() -funktion men det er i sigselv ikke "nok" :-) Den beste sikkerhed er altid "keep it simple", derfor så vil jeg ikke anbefale dig at bruge sprintf() sammen med noget så vitalt som SQL-statements :-)

pkt. 3: Som jeg skrev tildig tidligere så er Ungarsk Notation (som det hedder at man skriver str, int. m.v i starten af sine variabler) et spørgsmål om smag og behag. For mig selv er jeg konsekvent og bruger det for det er min erfaring at hvis man vender tilbage til kode efter en ferie så glor man sig helt blind på tingene og famler efter sin project dokumentation. lol ;-)

koden gemmer username, salt og password:
Fx:

username: test

salt: 4daac29c

password(test): e95043fa6389555112b2829f3326c954cbf9f215


Jeg vil ikke anbefale dig at bruge så langt et password til bruger login, da det skal være noget som brugeren kan huske. Hvis du sørge for at holde disse mål, så vil jeg sige at din password sikkerhed at go nok.

- Password længde: 8 Characters bestående at store og små bogstaver og talene 0-9. Ingen tegn af nogen art.



Indlæg senest redigeret d. 27.02.2008 10:52 af Bruger #11375

http://dk.php.net/manual/da/function.preg-match.php //PERL

http://dk.php.net/manual/da/function.ereg.php // POSIX

Og så kommer det næste spørgsmål, hvad er best? Smag og behag, endnu engang. Jeg vil sige POSIX, fordi POSIX er en standard, hvor imod PERL er sådan mere en PHP ting.


PHP folkene har allerede taget det valg. ereg udgår med PHP6... :)



Indlæg senest redigeret d. 29.02.2008 01:21 af Bruger #10216
I create.php får jeg denne fejl :
Parse error: syntax error, unexpected '=' in C:\\Programmer\\xampp\\htdocs\\create.php on line 18

Og har ændret database connection.



hvordan laver man sit eget spil ?





Parse error: syntax error, unexpected '=' in C:\\wamp\\www\\create.php on line 18

Jeg får også den fejl selv om jeg har rettet database info.



i SQL koden. Hvad gør "CREATE UNIQUE INDEX username
ON userlogin (username);" ???



quote_smart: Jeg rettede det det fordi det ellers ikke var muligt at logge ind, vil prøve at finde fejlen.

Sidste quote_smart: En lille misser

LIMIT 1: Vil blive indsat.




har gendannet det jeg havde ændret i quote_smart funktionen
har indsat quote_smart der hvor der manglede.
indsat limit 1

men nu virker koden ikk..



At skrive LIMIT 1 i dine queries er ligegyldigt, hvis du har struktureret din Database sådan så at "usename" er unique behøver du ikke bekymre dig herom. Du skal selvfølgelig sørge for også at lave username checkup på applikations niveu også..

Forbedringer:

1. Sørg for at være konsekvent på betnævnelses området(variabler, funktioner, m.m). Brug enten Danske eller Engelske(fortrukket) benævnelser.
(Eg. <input type='text' name='brugernavn' />;)

2. Du får intet ud af at bruge sprintf() i forbindelse med dinne queries. I en applikation med rigtig mangere brugere vill sådan noget kunne downe preformance en smule. Her høster du ingen score ;-)

3. Angivelse af variable type. Nogen bruger det, nogen bruger det ikke. Personligt mener jeg at man skal bruge det fordi det gør ens kode mere læsbar og nemere at redigere/fejlfinde i. En lille liste. (e.g $strVariabelName = "").

- String: str
- Integer: int
- Global: glb(en php ting)
- Boolean: bool
- Ressource: res
- Double: dbl
- Object: obj

4. Hvor du har nogle få ting sådan som jer ser det, så høster du VIRKELIG på sikring af dinne queries mod SQL injections, dog kan det blieve endnu bedre, og jeg vil i den nærmeste fremtid poste en artikel om netop SQL injections og hvordan man forebygger dem. :-)

Bortset fra 4 ting, så har du lavet noget som er højst brugbart. Godt arbejde!




t