/ 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
Hjælp til at finde login i php script
Fra : Anders Pedersen


Dato : 13-02-09 22:43

Hej alle.

Jeg leder efter et login-script i php, med en bruger.
Har fundet et her www.hjemmesideskolen.dk. Men synes ikke
sikkerheden omkring det er godt nok, da jeg efter at have logget
ind, kan kopier link adressen, også logge ud også indsætte den
igen. Også komme til samme side som med log in.
Det kan man fx ikke på facebook.

Så tænkte om der var nogen, som have evt. løsning på mit problem?
En tilføjelse til den kode på hjemmesideskolen.dk eller et link
til en anden side, som opfylder sikkerheden.


Med Venlig Hilsen Anders Pedersen.

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Gert Krabsen (14-02-2009)
Kommentar
Fra : Gert Krabsen


Dato : 14-02-09 09:07

Anders Pedersen skrev:
> Hej alle.
>
> Jeg leder efter et login-script i php, med en bruger.
> Har fundet et her www.hjemmesideskolen.dk. Men synes ikke
> sikkerheden omkring det er godt nok, da jeg efter at have logget
> ind, kan kopier link adressen, også logge ud også indsætte den
> igen. Også komme til samme side som med log in.
> Det kan man fx ikke på facebook.
>
> Så tænkte om der var nogen, som have evt. løsning på mit problem?
> En tilføjelse til den kode på hjemmesideskolen.dk eller et link
> til en anden side, som opfylder sikkerheden.
>

Ikke et link, men et hint (du skal osse selv tænke lidt

Når brugerens login-oplysninger er godkendt, opretter du en cookie hos
brugeren.
Alle øvrige sider starter med at checke, om denne cookie findes - i
modsat fald sendes de til login-siden.

Vupti...


ps. at arbede med cookies er ikke så besværligt, som det ser ud til



Anders Pedersen (14-02-2009)
Kommentar
Fra : Anders Pedersen


Dato : 14-02-09 12:09

Gert Krabsen wrote in dk.edb.internet.webdesign.serverside.php:
> Anders Pedersen skrev:
> > Hej alle.
> >
> > Jeg leder efter et login-script i php, med en bruger.
> > Har fundet et her www.hjemmesideskolen.dk. Men synes ikke
> > sikkerheden omkring det er godt nok, da jeg efter at have logget
> > ind, kan kopier link adressen, også logge ud også indsætte den
> > igen. Også komme til samme side som med log in.
> > Det kan man fx ikke på facebook.
> >
> > Så tænkte om der var nogen, som have evt. løsning på mit problem?
> > En tilføjelse til den kode på hjemmesideskolen.dk eller et link
> > til en anden side, som opfylder sikkerheden.
> >
>
> Ikke et link, men et hint (du skal osse selv tænke lidt
>
> Når brugerens login-oplysninger er godkendt, opretter du en cookie hos
> brugeren.
> Alle øvrige sider starter med at checke, om denne cookie findes - i
> modsat fald sendes de til login-siden.
>
> Vupti...
>
>
> ps. at arbede med cookies er ikke så besværligt, som det ser ud til
>
>

Har prøvet selv. Men kan ikke rigtig.

Men vil det sige med det login i php jeg allerede har. Det er godt nok?
Forstod det ikke helt det med cookies.


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Kim Ludvigsen (14-02-2009)
Kommentar
Fra : Kim Ludvigsen


Dato : 14-02-09 13:32

Anders Pedersen skrev:

> Men vil det sige med det login i php jeg allerede har. Det er godt nok?

Det er det sikkert. Har du indsat php-kode i alle sider,
eller har du bare lavet en loginside?

--
Mvh. Kim Ludvigsen
http://pc-sikkerhed.dk

Johan Holst Nielsen (14-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 14-02-09 18:45

Anders Pedersen wrote:
> Hej alle.
>
> Jeg leder efter et login-script i php, med en bruger.
> Har fundet et her www.hjemmesideskolen.dk. Men synes ikke
> sikkerheden omkring det er godt nok, da jeg efter at have logget
> ind, kan kopier link adressen, også logge ud også indsætte den
> igen. Også komme til samme side som med log in.
> Det kan man fx ikke på facebook.
>
> Så tænkte om der var nogen, som have evt. løsning på mit problem?
> En tilføjelse til den kode på hjemmesideskolen.dk eller et link
> til en anden side, som opfylder sikkerheden.


Hvis det blot er til en enkelt site kan noget ala følgende bruges

loginside.php
-----------------------------
<?php
//check login if post not empty
if(!empty($_POST)) {
if(!empty($_POST['user']) && $_POST['user'] == 'brugernavn' &&
!empty($_POST['pwd']) && $_POST['pwd'] == 'password') {
session_start();
$_SESSION['login'] = true;
header("Location: sideEfterLogin.php"); exit();
}
}
?>
<html>
<head><title>Log ind her</title></head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
Brugernavn: <input type="text" name="user" value="" /><br />
Password: <input type="password" name="pwd" value="" /><br />
<input type="submit" value="login" />
</form>
</body>
</html>
-----------------------------

*Indsæt disse linjer kode øverst (helt øverst!) i alle beskyttede filer
<?php
session_start();
if(empty($_SESSION['login'])) {
header("Location: UrlTilLogin.php"); exit();
}
?>


En MEGET simpel login formular....

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Anders Pedersen (15-02-2009)
Kommentar
Fra : Anders Pedersen


Dato : 15-02-09 21:19

Johan Holst Nielsen wrote in dk.edb.internet.webdesign.serverside.php:
> Anders Pedersen wrote:
> > Hej alle.
> >
> > Jeg leder efter et login-script i php, med en bruger.
> > Har fundet et her www.hjemmesideskolen.dk. Men synes ikke
> > sikkerheden omkring det er godt nok, da jeg efter at have logget
> > ind, kan kopier link adressen, også logge ud også indsætte den
> > igen. Også komme til samme side som med log in.
> > Det kan man fx ikke på facebook.
> >
> > Så tænkte om der var nogen, som have evt. løsning på mit problem?
> > En tilføjelse til den kode på hjemmesideskolen.dk eller et link
> > til en anden side, som opfylder sikkerheden.
>
>
> Hvis det blot er til en enkelt site kan noget ala følgende bruges
>
> loginside.php
> -----------------------------
> <?php
> //check login if post not empty
> if(!empty($_POST)) {
> if(!empty($_POST['user']) && $_POST['user'] == 'brugernavn' &&
> !empty($_POST['pwd']) && $_POST['pwd'] == 'password') {
> session_start();
> $_SESSION['login'] = true;
> header("Location: sideEfterLogin.php"); exit();
> }
> }
> ?>
> <html>
> <head><title>Log ind her</title></head>
> <body>
> <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
> Brugernavn: <input type="text" name="user" value="" /><br />
> Password: <input type="password" name="pwd" value="" /><br />
> <input type="submit" value="login" />
> </form>
> </body>
> </html>
> -----------------------------
>
> *Indsæt disse linjer kode øverst (helt øverst!) i alle beskyttede filer
> <?php
> session_start();
> if(empty($_SESSION['login'])) {
> header("Location: UrlTilLogin.php"); exit();
> }
> ?>
>
>
> En MEGET simpel login formular....
>
> --
> Johan Holst Nielsen
> Freelance PHP Developer - http://phpgeek.dk


Det vil sige med den ovenstående kode, kan jeg logge ind, også når jeg
logger ud så skal der logges ind før man kan se siderne?

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Johan Holst Nielsen (15-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 15-02-09 21:40

Anders Pedersen wrote:
> Det vil sige med den ovenstående kode, kan jeg logge ind, også når jeg
> logger ud så skal der logges ind før man kan se siderne?

Ja - der er dog intet logud script lavet... (men du bliver automatisk
logget ud når du lukker din browser).

Et log ud script kan dog rimelig simpelt laves


logout.php
-------------
<?php
session_start();
unset($_SESSION['login']);
header("Location: urlTilLoginside.php");
exit;
?>
-------------

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Anders Pedersen (15-02-2009)
Kommentar
Fra : Anders Pedersen


Dato : 15-02-09 23:17

Johan Holst Nielsen wrote in dk.edb.internet.webdesign.serverside.php:
> Anders Pedersen wrote:
> > Det vil sige med den ovenstående kode, kan jeg logge ind, også når jeg
> > logger ud så skal der logges ind før man kan se siderne?
>
> Ja - der er dog intet logud script lavet... (men du bliver automatisk
> logget ud når du lukker din browser).
>
> Et log ud script kan dog rimelig simpelt laves
>
>
> logout.php
> -------------
> <?php
> session_start();
> unset($_SESSION['login']);
> header("Location: urlTilLoginside.php");
> exit;
> ?>
> -------------
>
> --
> Johan Holst Nielsen
> Freelance PHP Developer - http://phpgeek.dk

Tak, sad jeg nemlig og tænkte på. Men har oprettet siden logout.php med den
kode du skriver. Men hvordan logger jeg så ud, hvis du forstår?


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Anders Pedersen (15-02-2009)
Kommentar
Fra : Anders Pedersen


Dato : 15-02-09 23:29

Anders Pedersen wrote in dk.edb.internet.webdesign.serverside.php:
> Johan Holst Nielsen wrote in dk.edb.internet.webdesign.serverside.php:
> > Anders Pedersen wrote:
> > > Det vil sige med den ovenstående kode, kan jeg logge ind, også når jeg
> > > logger ud så skal der logges ind før man kan se siderne?
> >
> > Ja - der er dog intet logud script lavet... (men du bliver automatisk
> > logget ud når du lukker din browser).
> >
> > Et log ud script kan dog rimelig simpelt laves
> >
> >
> > logout.php
> > -------------
> > <?php
> > session_start();
> > unset($_SESSION['login']);
> > header("Location: urlTilLoginside.php");
> > exit;
> > ?>
> > -------------
> >
> > --
> > Johan Holst Nielsen
> > Freelance PHP Developer - http://phpgeek.dk
>
> Tak, sad jeg nemlig og tænkte på. Men har oprettet siden logout.php med den
> kode du skriver. Men hvordan logger jeg så ud, hvis du forstår?
>
>
> --
> Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
> - Pædagogiske tutorials på dansk
> - Kom godt i gang med koderne
> KLIK HER! => http://www.html.dk/tutorials

Ligemeget.. Har fundet ud af det. Så tak for hjælpen.


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Erik Ginnerskov (14-02-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 14-02-09 19:53

Anders Pedersen wrote:

> Har fundet et her www.hjemmesideskolen.dk. Men synes ikke
> sikkerheden omkring det er godt nok, da jeg efter at have logget
> ind, kan kopier link adressen, også logge ud også indsætte den
> igen. Også komme til samme side som med log in.

Det er nok noget, du bilder dig ind, fordi du ser den samme menu i venstre
side uanset om du er logget ind eller ej. Indholdet på siden er forskelligt.

Hos mig vil hverken IE 7, FF 3.0.6, K-Meleon 1.5.1 eller Op 9.63 genvise
sider efter logout.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk


Johan Holst Nielsen (14-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 14-02-09 19:56

Erik Ginnerskov wrote:
> Anders Pedersen wrote:
>
>> Har fundet et her www.hjemmesideskolen.dk. Men synes ikke
>> sikkerheden omkring det er godt nok, da jeg efter at have logget
>> ind, kan kopier link adressen, også logge ud også indsætte den
>> igen. Også komme til samme side som med log in.
>
> Det er nok noget, du bilder dig ind, fordi du ser den samme menu i
> venstre side uanset om du er logget ind eller ej. Indholdet på siden er
> forskelligt.

Mon ikke tilfældet er, som Kim nævner, blot at Anders ikke har fået sat
det nødvendige php kode øverst i sine file (eller brugt din template -
ved ikke helt hvorledes det kode som du har liggende på dit site fungerer).

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Erik Ginnerskov (14-02-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 14-02-09 20:33

Johan Holst Nielsen wrote:

> Mon ikke tilfældet er, som Kim nævner, blot at Anders ikke har fået
> sat det nødvendige php kode øverst i sine file

Hvis så, har han ikke fulgt instruktionen og heller ikke hentet den
template, der kan downloades.

> (eller brugt din template -

I hvert fald ikke det, for den virker.

> ved ikke helt hvorledes det kode som du har liggende på dit site
> fungerer).

http://hjemmesideskolen.dk/scripts/phppass/tjek.php ned til "Du kan også
udforme".

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk


Johan Holst Nielsen (14-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 14-02-09 20:43

Erik Ginnerskov wrote:
> Johan Holst Nielsen wrote:
>
>> ved ikke helt hvorledes det kode som du har liggende på dit site
>> fungerer).
>
> http://hjemmesideskolen.dk/scripts/phppass/tjek.php ned til "Du kan også
> udforme".

Jeg synes faktisk ikke din opbygning er helt optimal... :)

Hvorfor vil du indtaste "Du skal være logget ind for at se....." på hver
eneste side? Hvis du en dag vil ændre teksten eller lign. skal du ind
over mange forskellige sider og redigere.

I stedet ville jeg tilføje en side - f.eks.

notloggedin.php med en simpelt side - hvor der blot står det som der
står under "else" pt. (selvfølgelig også med <html> osv...).

Så ville jeg ændre det i toppen til at være:

<?php
session_start();
if(empty($_SESSION['brugernavn']) || empty($_SESSION['password'])) {
header("Location: notloggedin.php");
exit;
}
?>

Endnu bedre kunne du lave det som en include fil - så brugerne blot
skulle/skal skrive "<?php require('check_login.inc.php'); ?> "

Det vil også gøre implementeringen nemmere for brugere der har knap så
meget forstand på php - og mindsker fejlen for de ødelægger en if-else
løkke et sted, hvor de ikke var tænkt.


--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Erik Ginnerskov (14-02-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 14-02-09 21:58

Johan Holst Nielsen wrote:

> Jeg synes faktisk ikke din opbygning er helt optimal... :)

Det kan muligvis optimeres yderligete. Jeg har lige lavet en ændring på
testsiderne, så man får en anden menu, hvis man ikke er logget idn.

> Hvorfor vil du indtaste "Du skal være logget ind for at se....." på
> hver eneste side?

Så længe det kun er tre testsider, er det ikke noget problem

> Hvis du en dag vil ændre teksten eller lign. skal
> du ind over mange forskellige sider og redigere.

Så ville jeg lægge fejlbeskeden i et include, det er ikke noget problem.

> notloggedin.php med en simpelt side - hvor der blot står det som der
> står under "else" pt. (selvfølgelig også med <html> osv...).
>
> Så ville jeg ændre det i toppen til at være:
>
> <?php
> session_start();
> if(empty($_SESSION['brugernavn']) || empty($_SESSION['password'])) {
> header("Location: notloggedin.php");
> exit;
> }

Jeg forstår din hensigt, men hvor er tjekket for forkert brugernavn eller
password så?

> Endnu bedre kunne du lave det som en include fil - så brugerne blot
> skulle/skal skrive "<?php require('check_login.inc.php'); ?> "
>
> Det vil også gøre implementeringen nemmere for brugere der har knap så
> meget forstand på php - og mindsker fejlen for de ødelægger en if-else
> løkke et sted, hvor de ikke var tænkt.

Jeg er bange for, at din løsning gør det mere kompliceret i stedet for
enklere.

Nu vil jeg gå i gang med at gøre fejlbeskeden til noget inkluderet i stedet
for enkeltstående på alle sider.

Skal også have ændret i downloadfilen, så menuen på beskyttet side ændres
ved ukorrekt login og så fejlbeskeden også der er inkluderet.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk


Johan Holst Nielsen (14-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 14-02-09 22:19

Erik Ginnerskov wrote:
> Johan Holst Nielsen wrote:
>
>> Jeg synes faktisk ikke din opbygning er helt optimal... :)
>
> Det kan muligvis optimeres yderligete. Jeg har lige lavet en ændring på
> testsiderne, så man får en anden menu, hvis man ikke er logget idn.

Det er ikke som sådan det jeg taler om.

>> Hvorfor vil du indtaste "Du skal være logget ind for at se....." på
>> hver eneste side?
>
> Så længe det kun er tre testsider, er det ikke noget problem

Nej - nu talte jeg heller ikke om *dine* problemer men brugernes
problemer, når de engang skal ændre det - og har 50 sider beskyttet.

>> Hvis du en dag vil ændre teksten eller lign. skal
>> du ind over mange forskellige sider og redigere.
>
> Så ville jeg lægge fejlbeskeden i et include, det er ikke noget problem.

Hvorfor dog ikke ligge hele logikken i en include fil? Det er at lære
brugerne tingene på en uoptimal måde?

>> notloggedin.php med en simpelt side - hvor der blot står det som der
>> står under "else" pt. (selvfølgelig også med <html> osv...).
>>
>> Så ville jeg ændre det i toppen til at være:
>>
>> <?php
>> session_start();
>> if(empty($_SESSION['brugernavn']) || empty($_SESSION['password'])) {
>> header("Location: notloggedin.php");
>> exit;
>> }
>
> Jeg forstår din hensigt, men hvor er tjekket for forkert brugernavn
> eller password så?

Tjekket er fint nok... MEN else lukken er fuldstændig unødvendig.

Ovenstående er i stedet for alt det står står på denne side:
http://hjemmesideskolen.dk/scripts/phppass/tjek.php

Altså - drop else sætningen. Du kan nøjes med en if alle øverst (sammen
med session_start();). Dine if else gør blot koden mere kompliceret.

>> Endnu bedre kunne du lave det som en include fil - så brugerne blot
>> skulle/skal skrive "<?php require('check_login.inc.php'); ?> "
>>
>> Det vil også gøre implementeringen nemmere for brugere der har knap så
>> meget forstand på php - og mindsker fejlen for de ødelægger en if-else
>> løkke et sted, hvor de ikke var tænkt.
>
> Jeg er bange for, at din løsning gør det mere kompliceret i stedet for
> enklere.
>
> Nu vil jeg gå i gang med at gøre fejlbeskeden til noget inkluderet i
> stedet for enkeltstående på alle sider.
>
> Skal også have ændret i downloadfilen, så menuen på beskyttet side
> ændres ved ukorrekt login og så fejlbeskeden også der er inkluderet.

I så fald tror jeg du misforstår mig.
Kan godt forsøge at lave din zip pakke om til noget som er mere optimalt
(og brugervenligt). Men vil ikke bruge tid på det, hvis det alligevel
ikke noget du vil bruge under ingen omstændigheder.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Erik Ginnerskov (14-02-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 14-02-09 23:09

Johan Holst Nielsen wrote:

> Hvorfor dog ikke ligge hele logikken i en include fil? Det er at lære
> brugerne tingene på en uoptimal måde?

Hvis det kan spare brugerne for at skulle escape en masse anførselstegn i
det beskyttede indhold, ville det selvflgelig være en fordel.

>> Jeg forstår din hensigt, men hvor er tjekket for forkert brugernavn
>> eller password så?
>
> Tjekket er fint nok... MEN else lukken er fuldstændig unødvendig.

> Kan godt forsøge at lave din zip pakke om til noget som er mere
> optimalt (og brugervenligt).

Jeg vil meget gerne se dit løsningsforslag. Og jeg er ikke uvillig til at
kreditere dig for koden, når jeg lægger den frem til fri afbenyttelse

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk


Johan Holst Nielsen (14-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 14-02-09 23:12

Erik Ginnerskov wrote:
> Johan Holst Nielsen wrote:
>
>> Kan godt forsøge at lave din zip pakke om til noget som er mere
>> optimalt (og brugervenligt).
>
> Jeg vil meget gerne se dit løsningsforslag. Og jeg er ikke uvillig til
> at kreditere dig for koden, når jeg lægger den frem til fri afbenyttelse

Jeg får lige sat noget sammen i morgen formiddag :)

Tjekker du din live.dk mail? Ellers poster jeg bare et link til filerne
her :)

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Erik Ginnerskov (14-02-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 14-02-09 23:35

Johan Holst Nielsen wrote:

> Tjekker du din live.dk mail?

Normalt ikke dagligt, men får jeg besked om, at der ligger noget, ser jeg
efter. Et link her er også brugbart.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk


Johan Holst Nielsen (15-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 15-02-09 13:59

Erik Ginnerskov wrote:
> Johan Holst Nielsen wrote:
>
>> Tjekker du din live.dk mail?
>
> Normalt ikke dagligt, men får jeg besked om, at der ligger noget, ser
> jeg efter. Et link her er også brugbart.

http://phpgeek.dk/php-single.zip

login.php er ændret - så den inkluderer tjeklogin.php.

fejl.inc er ændret til fejl.php - da der redirectes til denne side - og
den ikke inkluderes.

tjeklogin.php er tilføjet, tjekker login og redirecter til fejl.php hvis
brugeren ikke er logget ind.

bruger.php er ændret - så den ikke bliver ob_* længere (samt cleanet
filen en smule op)

læs_mig_først.txt er der tilføjet forklaring samt fjernet forklaring om
\ foran "'er da denne ikke er nødvendig længere.

Så er den i hvert fald lidt nemmere at implementere for brugerne.

Det eneste de skal gøre nu er at implementere "<?php
require('tjeklogin.inc'); ?>" øverst i alle filer der skal være beskyttet :)

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Erik Ginnerskov (15-02-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 15-02-09 14:23

Johan Holst Nielsen wrote:

> http://phpgeek.dk/php-single.zip

Har hentet den og kigger på det. Det ser umiddelbart godt ud, men jeg vil
lige teste det.

Hvilken funktion har

<?php
session_start();
?>

øverst i fejl.php ?

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk


Johan Holst Nielsen (15-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 15-02-09 14:24

Erik Ginnerskov wrote:
> Johan Holst Nielsen wrote:
>
>> http://phpgeek.dk/php-single.zip
>
> Har hentet den og kigger på det. Det ser umiddelbart godt ud, men jeg
> vil lige teste det.
>
> Hvilken funktion har
>
> <?php
> session_start();
> ?>
>
> øverst i fejl.php ?

Nej - den ligger øverst i tjeklogin.php :)

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Johan Holst Nielsen (15-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 15-02-09 14:26

Johan Holst Nielsen wrote:
> Nej - den ligger øverst i tjeklogin.php :)

tjeklogin.inc selvfølgelig. Der er ingen grund til at ligge den i
fejl.php - da de i princippet blot er en "statisk" side der giver
brugeren en fejlbesked om brugerens session enten er udløbet eller at
brugeren forsøger at kalde en side, som der ikke er adgang til.


--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Erik Ginnerskov (15-02-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 15-02-09 14:46

Johan Holst Nielsen wrote:

>> Nej - den ligger øverst i tjeklogin.php :)
>
> tjeklogin.inc selvfølgelig.

Der ligger en sådan kode øverst i fejl.php. Jeg kan ikke hvad gavn den gør
der, så den sletter jeg.

I øvrigt har jeg netop afsluttet en grundig test og der gives ikke under
nogen omstændigheder adgang til den beskyttede side, hverken ved manglende
eller forkert indtastning eller ved forsøg på at åbne siden udenom login.

Det betyder så, at jeg skal i gang med at lave mine sider om emnet om.

Hvor meget skal der stå vedrørende krediteringen for dit arbejde? Bare navn
eller med link til en side?

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk


Johan Holst Nielsen (15-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 15-02-09 15:52

Erik Ginnerskov wrote:
> Johan Holst Nielsen wrote:
>
>>> Nej - den ligger øverst i tjeklogin.php :)
>>
>> tjeklogin.inc selvfølgelig.
>
> Der ligger en sådan kode øverst i fejl.php. Jeg kan ikke hvad gavn den
> gør der, så den sletter jeg.

Det har du helt ret i - det er en "fejl".

> I øvrigt har jeg netop afsluttet en grundig test og der gives ikke under
> nogen omstændigheder adgang til den beskyttede side, hverken ved
> manglende eller forkert indtastning eller ved forsøg på at åbne siden
> udenom login.

Yes - man kan dog overveje at forsimple det endnu mere. Pt. gemmes der 3
session variabler - reelt er kun en enkelt nødvendig - og så tjekke på
den ene eksisterer. Dog kan brugernavn være meget handy at have i
fremtiden også.

Altså ændre

session_start();
$_SESSION['innlogget'] = 1;
$_SESSION['brugernavn'] = $brugernavn;
$_SESSION['password'] = $MD5_password;
header("Location: login.php");
exit;

til

session_start();
$_SESSION['brugernavn'] = $brugernavn;
header("Location: login.php");
exit;

i bruger.php

samt ændre

if(empty($_SESSION['brugernavn']) || empty($_SESSION['password'])) {
header("Location: fejl.php");
exit;
}

til

if(empty($_SESSION['brugernavn'])) {
header("Location: fejl.php");
exit;
}

i tjeklogin.inc

> Det betyder så, at jeg skal i gang med at lave mine sider om emnet om.
>
> Hvor meget skal der stå vedrørende krediteringen for dit arbejde? Bare
> navn eller med link til en side?

Bare navn vil være helt fint.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Erik Ginnerskov (15-02-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 15-02-09 18:40

Johan Holst Nielsen wrote:

> Yes - man kan dog overveje at forsimple det endnu mere. Pt. gemmes
> der 3 session variabler - reelt er kun en enkelt nødvendig - og så
> tjekke på den ene eksisterer. Dog kan brugernavn være meget handy at
> have i fremtiden også.

> [klip kode]

Det svarer til slet ikke at tjekke for korrekt password. Den løsning bryder
jeg mig ikke om, den er lidt vel usikker.

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk


Johan Holst Nielsen (15-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 15-02-09 20:01

Erik Ginnerskov wrote:
> Johan Holst Nielsen wrote:
>
>> Yes - man kan dog overveje at forsimple det endnu mere. Pt. gemmes
>> der 3 session variabler - reelt er kun en enkelt nødvendig - og så
>> tjekke på den ene eksisterer. Dog kan brugernavn være meget handy at
>> have i fremtiden også.
>
> Det svarer til slet ikke at tjekke for korrekt password. Den løsning
> bryder jeg mig ikke om, den er lidt vel usikker.

En bruger kan ikke selv sætte en session - så der er intet usikkerhed
ved det... Så længe $_SESSION['brugernavn'] kun sættes når passwordet er
korrekt (hvilket stadig er tilfældet!).

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Philip Nunnegaard (16-02-2009)
Kommentar
Fra : Philip Nunnegaard


Dato : 16-02-09 20:02

Johan Holst Nielsen skrev:

> En bruger kan ikke selv sætte en session - så der er intet usikkerhed
> ved det... Så længe $_SESSION['brugernavn'] kun sættes når passwordet er
> korrekt (hvilket stadig er tilfældet!).

Både og.
Til Firefox findes der en udvidelse, som gør at man kan ændre i sine
sessionvariabler.

Jeg erfarede det på den hårde måde ved at en bruger fuskede sig ind på
andre profiler. Jeg opdagede det ved at der i en afstemning var blevet
afgivet stemmer fra profiler der slet ikke havde været logget ind, efter
afstemningen var kommet på siden.

Derefter fandt jeg på en løsning hvor jeg gemte en md5-sum af en
kombination af 2 felter fra profiltabellen, hvoraf det ene var
kodeordet, mens det andet var et felt hvis værdi brugerne ikke kendte.

Og så en lille fil der inkluderes på alle beskyttede sider, der tjekker
om disse to sessionvariabler stemmer overens med det faktiske.

Passer de ikke sammen, køres der en session_destroy().


--
Philip
Emailadressen er gyldig

Johan Holst Nielsen (16-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 16-02-09 20:35

Philip Nunnegaard wrote:
> Johan Holst Nielsen skrev:
>
>> En bruger kan ikke selv sætte en session - så der er intet usikkerhed
>> ved det... Så længe $_SESSION['brugernavn'] kun sættes når passwordet
>> er korrekt (hvilket stadig er tilfældet!).
>
> Både og.
> Til Firefox findes der en udvidelse, som gør at man kan ændre i sine
> sessionvariabler.

Nej - du kan ændre dine *cookies*

En session i PHP består af en cookie (for det meste!) + en tekstfil på
serveren!

Det eneste som cookien indeholder er session id'et der referer til filen
på serveren. Du kan IKKE ændre data i en session via en cookie editor.

> Jeg erfarede det på den hårde måde ved at en bruger fuskede sig ind på
> andre profiler. Jeg opdagede det ved at der i en afstemning var blevet
> afgivet stemmer fra profiler der slet ikke havde været logget ind, efter
> afstemningen var kommet på siden.

Tjah - så må så være en anden fejl. Ikke direkte relateret til ovenstående.

> Derefter fandt jeg på en løsning hvor jeg gemte en md5-sum af en
> kombination af 2 felter fra profiltabellen, hvoraf det ene var
> kodeordet, mens det andet var et felt hvis værdi brugerne ikke kendte.

Det er også klart en god metode - især hvis man ønsker en ekstra
sikring. Men det bør altså på ingen måde være nødvendig i en løsning som
denne. Igen - og det kan ikke siges nok - man kan IKKE redigere eller
skabe en fake session nemt - man skal have fat i et session id der også
er udstedt af serveren (igen men forbehold for store sikkerhedshuller
man selv bygger op - det er dog ikke tilfældet i koden jeg sendte).

> Og så en lille fil der inkluderes på alle beskyttede sider, der tjekker
> om disse to sessionvariabler stemmer overens med det faktiske.

Yes - men det bør slet ikke være nødvendig. Den eneste måde (hvis
systemet er bygget korrekt op) som man kan overtage en session der ikke
er skabt korrekt, er ved at "fange" en anden brugers session id. Der
tjekkes ikke på IP mm. i den default php metode.

I så fald vil jeg dog anbefale af man går ind og laver noget custom
session management. Man kan faktisk lave rimelig brugbare systemer på
relativt kort tid - som selvfølgelig kan bruge om og om igen. F.eks. kan
man indbygge at et session id KUN må kaldes af en bestemt ip og evt.
kombinere det med et tjek af user agent - så er man begyndt at være
temmelig sikret.

Tag et kig på session_set_save_handler() hvis det er noget man har lyst
til at gå i krig med :)

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Philip Nunnegaard (16-02-2009)
Kommentar
Fra : Philip Nunnegaard


Dato : 16-02-09 20:58

Johan Holst Nielsen skrev:

>> Både og.
>> Til Firefox findes der en udvidelse, som gør at man kan ændre i sine
>> sessionvariabler.
>
> Nej - du kan ændre dine *cookies*

Så tror jeg lige at vi skal være enige om terminologien.
Sessionvariabler er det jeg kalder dette her: $_SESSION["noget"].
Altså er sessionvariabel og sessioncookie synonymt i mit ordforråd.

Jeg kan konstatere at det er to forskellige ting.
Jeg mente naturligvis sessioncookies.

Jeg er helt på det rene med at en session tildeles en id, som det er
noget sværere for brugeren at gøre noget med.


>> Jeg erfarede det på den hårde måde ved at en bruger fuskede sig ind på
>> andre profiler. Jeg opdagede det ved at der i en afstemning var blevet
>> afgivet stemmer fra profiler der slet ikke havde været logget ind,
>> efter afstemningen var kommet på siden.
>
> Tjah - så må så være en anden fejl. Ikke direkte relateret til ovenstående.

Dog en sikkerhedsmæssig brist, fordi der manglede en eller anden form
for validering af brugerens session.


> Yes - men det bør slet ikke være nødvendig. Den eneste måde (hvis
> systemet er bygget korrekt op) som man kan overtage en session der ikke
> er skabt korrekt, er ved at "fange" en anden brugers session id. Der
> tjekkes ikke på IP mm. i den default php metode.

Altså noget med at tjekke på PHPSESSID?


--
Philip
Emailadressen er gyldig

Johan Holst Nielsen (16-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 16-02-09 21:15

Philip Nunnegaard wrote:
> Johan Holst Nielsen skrev:
>
>>> Både og.
>>> Til Firefox findes der en udvidelse, som gør at man kan ændre i sine
>>> sessionvariabler.
>>
>> Nej - du kan ændre dine *cookies*
>
> Så tror jeg lige at vi skal være enige om terminologien.
> Sessionvariabler er det jeg kalder dette her: $_SESSION["noget"].
> Altså er sessionvariabel og sessioncookie synonymt i mit ordforråd.

Nej - det er netop ikke det samme.

$_SESSION['foo'] = 'abc';
$_SESSION['bar'] = '123';
$_SESSION['baz'] = 'xyz';

Sætter kun *én* session cookie. Denne session cookie henviser til 3
sessionvariabler der ligger gemt i en tekstfil (typisk i /tmp/* hvis det
er et linux system)

> Jeg kan konstatere at det er to forskellige ting.
> Jeg mente naturligvis sessioncookies.

Ja - men den kan du ikke fake - uden at have adgang til servere, lave
noget social engineering eller "gætte" et session id.

> Jeg er helt på det rene med at en session tildeles en id, som det er
> noget sværere for brugeren at gøre noget med.

Brugeren bør ikke kunne gætte et session id. Et session id har 26^36
forskellige kombinationmuligheder. Hvis du vil bryde en session er
hackning af serveren eller social engineering typisk den nemmeste metode.

>>> Jeg erfarede det på den hårde måde ved at en bruger fuskede sig ind
>>> på andre profiler. Jeg opdagede det ved at der i en afstemning var
>>> blevet afgivet stemmer fra profiler der slet ikke havde været logget
>>> ind, efter afstemningen var kommet på siden.
>>
>> Tjah - så må så være en anden fejl. Ikke direkte relateret til
>> ovenstående.
>
> Dog en sikkerhedsmæssig brist, fordi der manglede en eller anden form
> for validering af brugerens session.

Enig - det kan sagnes være :) Men det er ikke sessionen skyld men
programmørens (og det er ikke for at pege fingre af dig!).

>> Yes - men det bør slet ikke være nødvendig. Den eneste måde (hvis
>> systemet er bygget korrekt op) som man kan overtage en session der
>> ikke er skabt korrekt, er ved at "fange" en anden brugers session id.
>> Der tjekkes ikke på IP mm. i den default php metode.
>
> Altså noget med at tjekke på PHPSESSID?

Ja - generelt mener jeg altid man bør sætte use_only_cookies til true/1.
I hvert fald med mindre man laver sin egen custom session handler. Alt
andet gør muligheden for social engineering større.

Hvis use_only_cookies sætter til true vil du aldrig opleve PHPSESSID.
Hvis man har behov for at få brugere ind der ikke accepterer session
cookies, vil jeg mene en custom session handler er den rigtige vej at
gå, hvis der skal være fokus på sikkerhed.

Ligeledes, hvis man ligger på en shared server løsning, kan det tit være
en fordel at bruge en custom session handler, da man så kan flytte
sessionsdata fra /tmp til f.eks. en database. Således er man sikre på
andre brugere på samme server ikke begynder at snuse til ens sessionsdata.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Erik Ginnerskov (16-02-2009)
Kommentar
Fra : Erik Ginnerskov


Dato : 16-02-09 21:04

Johan Holst Nielsen wrote:

> F.eks.
> kan man indbygge at et session id KUN må kaldes af en bestemt ip og

Er det ikke et spark i ansigtet på dem, der har en dynamisk IP?

--
Med venlig hilsen
Erik Ginnerskov
http://hjemmesideskolen.dk - http://ginnerskov.dk
http://vestfynswebdesign.dk - http://html-faq.dk


Johan Holst Nielsen (16-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 16-02-09 21:08

Erik Ginnerskov wrote:
> Johan Holst Nielsen wrote:
>
>> F.eks.
>> kan man indbygge at et session id KUN må kaldes af en bestemt ip og
>
> Er det ikke et spark i ansigtet på dem, der har en dynamisk IP?

En dynamisk ip ændres sjældent under en session. Det sker typisk kun når
nettet lukkes ned. En session er kun fra brugeren åbner browseren til
den lukkes igen (eller der logges ud)

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Stig Johansen (16-02-2009)
Kommentar
Fra : Stig Johansen


Dato : 16-02-09 06:13

Johan Holst Nielsen wrote:

> Altså ændre
>
> session_start();
> $_SESSION['innlogget'] = 1;
> $_SESSION['brugernavn'] = $brugernavn;
> $_SESSION['password'] = $MD5_password;

Tillad mig at komme med et lille (generelt) ændringsforslag.
Det er ikke målrettet citatet her, men et eller andet sted skulle jeg
placere indlægget.

Det er god latin ikke at opbevare passwords i klartekst, men 'krypteret',
som også her.

Problemet er, at der findes services, der indeholder baglæns opslag ud fra
MD5 summer (og andet), så hvis man får fat i MD5 summen (evt. via SQL
Injection), kan man sandsynligvis finde det rigtige password.

Løsningen er at 'salte', så samme password ikke altid har samme MD5.

I stedet for kun at lave MD5 på passwordet ville jeg nok gemme MD5 på
kombinationen af brugernavn og password.

Kun et lille forslag, men det er ikke fiction:
<http://www.version2.dk/artikel/9879-usikker-md5-hashing-foerte-til-20000-laekkede-kodeord>
(Overskriften er dog misvisende)

--
Med venlig hilsen
Stig Johansen

Johan Holst Nielsen (16-02-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 16-02-09 07:54

Stig Johansen wrote:
> Johan Holst Nielsen wrote:
>
>> Altså ændre
>>
>> session_start();
>> $_SESSION['innlogget'] = 1;
>> $_SESSION['brugernavn'] = $brugernavn;
>> $_SESSION['password'] = $MD5_password;
>
> Tillad mig at komme med et lille (generelt) ændringsforslag.
> Det er ikke målrettet citatet her, men et eller andet sted skulle jeg
> placere indlægget.
>
> Det er god latin ikke at opbevare passwords i klartekst, men 'krypteret',
> som også her.

Enig. Men vi skal også helst have brugerne til at kunne bruge løsningen :)

> Problemet er, at der findes services, der indeholder baglæns opslag ud fra
> MD5 summer (og andet), så hvis man får fat i MD5 summen (evt. via SQL
> Injection), kan man sandsynligvis finde det rigtige password.

Man kan sandsynligvis finde et password der matcher MD5 summen - ikke
sikkert det er det korrekte password. Men et password der virker. To
forskellige password kan sagnes have den samme MD5 sum (omendt det er
sjældent det sker).

> Løsningen er at 'salte', så samme password ikke altid har samme MD5.

Korrekt.

> I stedet for kun at lave MD5 på passwordet ville jeg nok gemme MD5 på
> kombinationen af brugernavn og password.

Jeg ville slet ikke gemme passwordet i en session - da det er
fuldstændig unødvendig i denne løsning. Det har jeg også skrevet lidt
senere. Direkte i koden kan man diskutere hvorvidt man bør, eller skal,
skrive en MD5 kode med salt - men til det brug denne kode er til, finder
jeg det ikke super nødvendigt.

--
Johan Holst Nielsen
Freelance PHP Developer - http://phpgeek.dk

Kim Ludvigsen (14-02-2009)
Kommentar
Fra : Kim Ludvigsen


Dato : 14-02-09 22:04

Johan Holst Nielsen skrev:

> Endnu bedre kunne du lave det som en include fil - så brugerne blot
> skulle/skal skrive "<?php require('check_login.inc.php'); ?> "

Det er sådan, jeg har lavet det i mine login-scripts:
http://kimludvigsen.dk/programmer-internet-kompozer-trin-php.php#adgangskode

De har desuden den fordel, at besøgende kan gå direkte ind
på en underside i stedet for at skulle omkring en
selvstændig login-side.

> Det vil også gøre implementeringen nemmere for brugere der har knap så
> meget forstand på php - og mindsker fejlen for de ødelægger en if-else
> løkke et sted, hvor de ikke var tænkt.

Jeg linker så til Eriks scripts for dem, der vil have mere
avancerede løsninger (indsæt selv smiley).

--
Mvh. Kim Ludvigsen
http://pc-sikkerhed.dk

Søg
Reklame
Statistik
Spørgsmål : 177458
Tips : 31962
Nyheder : 719565
Indlæg : 6408169
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste