/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Login procedure - sikkert nok?
Fra : Mikkel Z. Herold \(M~


Dato : 10-06-03 11:33

Hej gruppe.

Jeg har lavet en lille login procedure med sessions og en MySQL database,
men da det er mit første forsøg, er jeg ikke sikker på, om der er nogen
"huller" i.

Jeg gør sådan her:

1) Brugeren angiver brugernavn og password.
2) Disse bliver tjekket mod de registrerede værdier i databasen (bruger md5
til passwordet)
3) Hvis de stemmer overens definerer jeg $_SESSION['access'] = TRUE. Ellers
FALSE.
4) På de sider, der skal beskyttes tjekker jeg så, om $_SESSION['access'] ==
TRUE og redirecter til loginsiden hvis det ikke er tilfældet.

Som det ses, tjekker jeg kun passwordet mod værdien i databasen én gang. Man
kan selvfølgelig gøre det på hver side, men er det nødvendigt? Bliver
proceduren mere sikker af det?

Er det på nogen måde muligt for andre at sætte $_SESSION['access'] variablen
"manuelt", og dermed få adgang uden om database-tjekket?

Hvad gør I andre?

Mvh.

Mikkel

--
"And my sanity scans the horizon"
Sting - The Wild Wild Sea

http://www.mzh.dk



 
 
Martin C. Petersen (10-06-2003)
Kommentar
Fra : Martin C. Petersen


Dato : 10-06-03 12:05

"Mikkel Z. Herold (MZH)" <mikkel@mzh.NOSPAMdk> skrev i en meddelelse
news:3ee5b3e1$0$15339$ba624c82@nntp05.dk.telia.net...
> Er det på nogen måde muligt for andre at sætte $_SESSION['access']
variablen
> "manuelt", og dermed få adgang uden om database-tjekket?
Hvad med at putte brugernavnet og md5-hash'en af adgangskoden ned i et par
session-variabler, og så checke disse mod databasen hver gang noget skal
udføres? Så slipper du for at tænke over, om nogen kan ændre i
sessionvariablerne..


Martin



Mikkel Z. Herold \(M~ (10-06-2003)
Kommentar
Fra : Mikkel Z. Herold \(M~


Dato : 10-06-03 12:27

> Hvad med at putte brugernavnet og md5-hash'en af adgangskoden ned i
> et par session-variabler, og så checke disse mod databasen hver gang
> noget skal udføres? Så slipper du for at tænke over, om nogen kan
> ændre i sessionvariablerne..

Det var egentlig det, mit spørgsmål gik på: Er det sikkert nok at tjekke
$_SESSION['access'] variablen eller kan den manipuleres?

Som du skriver vil det være helt sikkert at tjekke brugernavn og password på
alle de beskyttede sider, men jeg er i tvivl om, om det er "overkill", for
det giver jo en frygtelig masse databasekald...

Mikkel

--
"And my sanity scans the horizon"
Sting - The Wild Wild Sea

http://www.mzh.dk



Johan Holst Nielsen (10-06-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 10-06-03 12:30

Mikkel Z. Herold (MZH) wrote:
> Det var egentlig det, mit spørgsmål gik på: Er det sikkert nok at tjekke
> $_SESSION['access'] variablen eller kan den manipuleres?
>
> Som du skriver vil det være helt sikkert at tjekke brugernavn og password på
> alle de beskyttede sider, men jeg er i tvivl om, om det er "overkill", for
> det giver jo en frygtelig masse databasekald...

Well... session'en er jo netop mere end en cookie.

SessionID bliver lagt i cookien (eller hvad man nu har sat session's
indstillingerne til).
Denne referer til en session's fil i dit session bibliotek. Derfor kan
din session's indhold IKKE manipuleres med mindre man har adgang til din
harddisk. Typisk vil sessionen ligge i /tmp/ hvis du bruger linux :)

Tag et kig på:
http://www.acros.si/papers/session_fixation.pdf

Det forklarer lidt om Sessions og sikkerhed (linket er også på php.net).

mvh
Johan


Martin C. Petersen (10-06-2003)
Kommentar
Fra : Martin C. Petersen


Dato : 10-06-03 12:37

"Mikkel Z. Herold (MZH)" <mikkel@mzh.NOSPAMdk> skrev i en meddelelse
news:3ee5c097$0$15362$ba624c82@nntp05.dk.telia.net...
> Det var egentlig det, mit spørgsmål gik på: Er det sikkert nok at tjekke
> $_SESSION['access'] variablen eller kan den manipuleres?
Sessiondata opbevares normalt som klartekst i filer, svarende til de enkelte
sessions, under /tmp, ejet af brugeren php kører som. Hvis man altså har
adgang til at rette i disse filer, har man mulighed for at give sig selv
adgang..


Martin



Martin Sveegaard (10-06-2003)
Kommentar
Fra : Martin Sveegaard


Dato : 10-06-03 13:23

On Tue, 10 Jun 2003 13:37:00 +0200, "Martin C. Petersen"
<mcp@phys.au.dk> wrote:

>"Mikkel Z. Herold (MZH)" <mikkel@mzh.NOSPAMdk> skrev i en meddelelse
>news:3ee5c097$0$15362$ba624c82@nntp05.dk.telia.net...
>> Det var egentlig det, mit spørgsmål gik på: Er det sikkert nok at tjekke
>> $_SESSION['access'] variablen eller kan den manipuleres?
>Sessiondata opbevares normalt som klartekst i filer, svarende til de enkelte
>sessions, under /tmp, ejet af brugeren php kører som. Hvis man altså har
>adgang til at rette i disse filer, har man mulighed for at give sig selv
>adgang..
>
>
>Martin

Så hvis man sørger for at /tmp mappen befinder sig over rodmappen, kan
man vel være rimelig sikker på at den ikke kan manipuleres.
MVH Martin S

Morten Winkler Jørge~ (10-06-2003)
Kommentar
Fra : Morten Winkler Jørge~


Dato : 10-06-03 14:24

> Som du skriver vil det være helt sikkert at tjekke brugernavn og password
> på alle de beskyttede sider, men jeg er i tvivl om, om det er "overkill",
> for det giver jo en frygtelig masse databasekald...

Er det da et problem? Selvom der er mange med "bredbånd" på helt op til 512
kB er der stadig mange med 56k og lavere modemforbindelse (mig selv inkl.).
Selv med 512 kB er opslaget til localhost betydeligt hurtigere 0.00 - 0.02
sekunder m. opslag i en database m 120 medlemmer på min sløve skrivebords
PC og brugeren kommer til at vente på at downloade istedet for på at du får
tjekket færdig.

Morten
--
...som ønsker sig en ny PC


Johan Holst Nielsen (10-06-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 10-06-03 14:24



Morten Winkler Jørgensen wrote:
>>Som du skriver vil det være helt sikkert at tjekke brugernavn og password
>>på alle de beskyttede sider, men jeg er i tvivl om, om det er "overkill",
>>for det giver jo en frygtelig masse databasekald...
>
> Er det da et problem? Selvom der er mange med "bredbånd" på helt op til 512
> kB er der stadig mange med 56k og lavere modemforbindelse (mig selv inkl.).
> Selv med 512 kB er opslaget til localhost betydeligt hurtigere 0.00 - 0.02
> sekunder m. opslag i en database m 120 medlemmer på min sløve skrivebords
> PC og brugeren kommer til at vente på at downloade istedet for på at du får
> tjekket færdig.

Hmm, databaseopkald har intet med brugerens forbindelse at gøre? Med
mindre du laver connection over nettet? Er der et eller andet jeg har
glippet her?

mvh
Johan


Martin C. Petersen (10-06-2003)
Kommentar
Fra : Martin C. Petersen


Dato : 10-06-03 14:53

"Johan Holst Nielsen" <johan@weknowthewayout.com> skrev i en meddelelse
news:3EE5DBF2.8090307@weknowthewayout.com...
> > Er det da et problem? Selvom der er mange med "bredbånd" på helt op til
512
> > kB er der stadig mange med 56k og lavere modemforbindelse (mig selv
inkl.).
> > Selv med 512 kB er opslaget til localhost betydeligt hurtigere 0.00 -
0.02
> > sekunder m. opslag i en database m 120 medlemmer på min sløve
skrivebords
> > PC og brugeren kommer til at vente på at downloade istedet for på at du
får
> > tjekket færdig.
>
> Hmm, databaseopkald har intet med brugerens forbindelse at gøre? Med
> mindre du laver connection over nettet? Er der et eller andet jeg har
> glippet her?
Morten sammenligner den tid, det tager at lave ét databaseopslag, med tiden,
det tager at downloade den resulterende side, og konkluderer at førstnævnte
generelt er meget lille i forhold til sidstnævnte..

Desuden vil opslaget nok også ofte være meget hurtigere end hvad scriptet
ellers skal udføre..


Martin



Johan Holst Nielsen (10-06-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 10-06-03 15:04

Martin C. Petersen wrote:
>>Hmm, databaseopkald har intet med brugerens forbindelse at gøre? Med
>>mindre du laver connection over nettet? Er der et eller andet jeg har
>>glippet her?
>
> Morten sammenligner den tid, det tager at lave ét databaseopslag, med tiden,
> det tager at downloade den resulterende side, og konkluderer at førstnævnte
> generelt er meget lille i forhold til sidstnævnte..
>
> Desuden vil opslaget nok også ofte være meget hurtigere end hvad scriptet
> ellers skal udføre..

Aaah okay :) Jeg var bare helt faldet af på den ;) Så er jeg med igen...

mvh
Johan


Mikkel Z. Herold \(M~ (10-06-2003)
Kommentar
Fra : Mikkel Z. Herold \(M~


Dato : 10-06-03 17:23

> Selv med 512 kB er opslaget til localhost
> betydeligt hurtigere 0.00 - 0.02 sekunder m. opslag i en database m
> 120 medlemmer på min sløve skrivebords PC og brugeren kommer til at
> vente på at downloade istedet for på at du får tjekket færdig.

Det er selvfølgelig en god pointe. Jeg har bare altid haft den opfattelse,
at databasekald er relativt "tungere" end f.eks. at skulle tjekke værdien af
en variabel. Ofte (altid?) ligger databasen vel på en anden server, hvorimod
variablen ligger i selve scriptet...

Performance-forskellen er selvfølgelig minimal så længe vi snakker et helt
simpelt system som mit, men jeg er interesseret i, om der er en "rigtig"
måde at lave login-procedurer på, og om den indebærer databasekald for hver
side, der skal password-beskyttes.

Mikkel

--
"And my sanity scans the horizon"
Sting - The Wild Wild Sea

http://www.mzh.dk



Peter Sepstrup (10-06-2003)
Kommentar
Fra : Peter Sepstrup


Dato : 10-06-03 17:56

> > Selv med 512 kB er opslaget til localhost
> > betydeligt hurtigere 0.00 - 0.02 sekunder m. opslag i en database m
> > 120 medlemmer på min sløve skrivebords PC og brugeren kommer til at
> > vente på at downloade istedet for på at du får tjekket færdig.
>
> Det er selvfølgelig en god pointe. Jeg har bare altid haft den opfattelse,
> at databasekald er relativt "tungere" end f.eks. at skulle tjekke værdien
af
> en variabel. Ofte (altid?) ligger databasen vel på en anden server,
hvorimod
> variablen ligger i selve scriptet...

Jeg vil nu mene at MySQL serveren tit ligger på samme maskine som
Apache/php, men det er selvf. meget forskelligt fra server til server.

> Performance-forskellen er selvfølgelig minimal så længe vi snakker et helt
> simpelt system som mit, men jeg er interesseret i, om der er en "rigtig"
> måde at lave login-procedurer på, og om den indebærer databasekald for
hver
> side, der skal password-beskyttes.

Hvis du læser lidt på www.dk.php.net om sessions vil du se at hvis dine
sessions skal være rigtig sikre bør du kryptere din forbindelse med f.eks.
SSL.
http://dk2.php.net/session



Morten Winkler Jørge~ (11-06-2003)
Kommentar
Fra : Morten Winkler Jørge~


Dato : 11-06-03 08:34

Mikkel Z. Herold (MZH) wrote:

> Ofte (altid?) ligger databasen vel på en anden server,
Som standard accepterer MySQL ikke forespørgsler fra andre maskiner end
localhost. At du, måske, får to forskellige adresser kan have noget med
fejltolerence, uigennemsigtighed og meget andet DNS relateret fnidder at
gøre. Prøv med en "dig -x" (under *nix) at se om ikke de to adresser på
henholdsvis web- og database-maskine ender ved samme IP nummer. Det kunne
være sjovt hvis det var tilfældet.

> Performance-forskellen er selvfølgelig minimal så længe vi snakker et helt
> simpelt system som mit, men jeg er interesseret i, om der er en "rigtig"
> måde at lave login-procedurer på, og om den indebærer databasekald for
> hver side, der skal password-beskyttes.
Jeg har som regel et "adgangsobjekt" med den ønskede funktionalitet som
vedligeholdes over samtlige sider i sitet. Hver gang (som regel en pr.
besøg) en bruger logger på, foretages opslag i passwordfil/database. Ud fra
det gemmes privilegier, grupper, brugernavn mv. i det objekt der, via
sessions, vedligeholdes gennem hele sitet.

Håber det hjalp lidt.
Morten

Mikkel Z. Herold \(M~ (11-06-2003)
Kommentar
Fra : Mikkel Z. Herold \(M~


Dato : 11-06-03 09:35

> Jeg har som regel et "adgangsobjekt" med den ønskede funktionalitet
> som vedligeholdes over samtlige sider i sitet. Hver gang (som regel
> en pr. besøg) en bruger logger på, foretages opslag i
> passwordfil/database. Ud fra det gemmes privilegier, grupper,
> brugernavn mv. i det objekt der, via sessions, vedligeholdes gennem
> hele sitet.

Det lyder spændende... Jeg har endnu ikke leget med klasser eller objekter,
men må hellere få kigget lidt på det.

Nogen der kender en god tutorial - ud over "den fine manual" .

Mikkel

--
"And my sanity scans the horizon"
Sting - The Wild Wild Sea

http://www.mzh.dk



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste