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