Avatar billede Slettet bruger
22. juni 2006 - 21:58 Der er 30 kommentarer og
1 løsning

Sikkerhedsbrist ved typen "hidden" ved FORM

Hej eksperter!

Når man vil lave en admin-del til sit side kan man jo nok have brug for flere "led"...

Eks.:
1) Loginside (HTML-form)
2) Tjek kodeord - hvis korrekt vises egenskaber for siden (disse kan så ændres) (PHP-genereret HTML-form)
3) Her ændres egenskaberne så (PHP)

Problemet er så, at enhver med lidt kendskab til PHP og HTML selv kan lave et script, der springer direkte til den tredje side og ændrer i egenskaberne - bare uden et interface. Man kan jo rimelig nemt gætte navnene på de variabler, der angiver hvilke egenskaber, der skal ændres.

For at undgå at dette sker, har jeg forsøgt mig med et "hidden"-element i min FORM på anden side. Dens "value" er så sat til det korrekte kodeord. Så tjekker den tredje side dette kodeord, der, hvis man har været igennem de tidligere trin, er rigtigt.
Problemet er så bare, at ved brug af typen "hidden" som sikkerhedstjek, kan brugeren se kodeordet i kildekoden!!!
DET er lidt af en bommert!

Så her er endelig spørgsmålet: Er der en bedre metode til at tjekke, om brugeren har indtastet korrekte informationer på en tidligere side i en sådan kæde?
Avatar billede iss Novice
22. juni 2006 - 22:03 #1
Brug session istedet, hvor du har en funktion den tjekker om session id og og bruger er i orden du kører på alle sider, så kan man ikke hoppe forbi noget.
Avatar billede leif Seniormester
22. juni 2006 - 22:06 #2
Avatar billede jakobdo Ekspert
22. juni 2006 - 22:07 #3
iss: Med mindre der er en som stjæler ens session-id! :o)
Ellers er sessions vejen frem, som iss siger.
Du skal altid tjekke for alle tænkelige ting, eller omvendt, sikre du kun godkender lige præcis det som er meningen der skal modtages.
Avatar billede iss Novice
22. juni 2006 - 22:09 #4
Derfor jeg skriver man tjekker session ID'en...
Avatar billede jakobdo Ekspert
22. juni 2006 - 22:25 #5
iss: Og jeg skrev, man kan stjæle session ID. :o)
Avatar billede iss Novice
22. juni 2006 - 22:31 #6
Hvis man tjekker den ordenligt kan det ikke lade sig gøre.
Avatar billede jakobdo Ekspert
23. juni 2006 - 07:46 #7
Iss: Ok, så siger vi det! :o)
Avatar billede Slettet bruger
23. juni 2006 - 08:31 #8
Lol, siden har nok ikke mange hackeres interesse...
Når den er færdig kommer den til at lægge på http://www.krainart.dk/.
I kna jo lige se den...
Den er ikke specielt fancy ;)
Avatar billede Slettet bruger
23. juni 2006 - 08:36 #9
Øøøøh....
Jeg er ikke helt sikker på, at jeg forstår princippet.
Avatar billede Slettet bruger
23. juni 2006 - 08:37 #10
Er en session et ur, der tæller fra sezzion_start()?
Tjekker den så, om sessionen har den ritige værdi?
Kan I ikke lige give et eksempel...?
Avatar billede iss Novice
23. juni 2006 - 09:39 #11
Du laver session_start(); på alle dine sider.

Du laver en login side, hvor du tjekker brugernavn/password. og sætter en session variabel du senere kigger efter for om brugeren er logget ind.

Du laver en funktion der tester en session om brugeren er lopgget ind, om session id er i orden osv. er den så ikke i orden logger du vedkommenden af.

Den funktion kalder du som der første på alle de sider du ikke vil have andre ser på...
Avatar billede jakobdo Ekspert
23. juni 2006 - 10:48 #12
Avatar billede Slettet bruger
23. juni 2006 - 15:33 #13
Mange tak!
Jeg fandt artiklen 'SESSION med PHP' (http://www.eksperten.dk/artikler/923).
Den forklarede alt, jeg behøver at vide.
Tak, bare smid et svar, begge to!
Avatar billede Slettet bruger
23. juni 2006 - 15:56 #14
HOV! Hvorfor virker dette ikke:

--- index.html ---

<FORM method="post" action="session.php">
    Kodeord:<BR>
    <INPUT type="password" name="password" size=50 maxlength=25><BR><BR>
    <INPUT type="submit" value="Fortsæt">
    <INPUT type="reset" value="Nulstil">
</FORM>


--- session.php ---

<? $correctPassword = "kodeord" ?>
<?

    // Correct password
    if ($_POST["password"] == $correctPassword)
    {
        session_start();
        $_SESSION["password"] = $_POST["password"];

?>
Du er nu logget ind.
<FORM method="post" action="end.php">
    Kommentar:
    <INPUT type="text" name="comment" size=50 maxlength=25><BR><BR>
    <INPUT type="submit" value="Fortsæt">
    <INPUT type="reset" value="Nulstil">
</FORM>
<?

    // Wrong password
    }
    else if ($_POST["password"])
    {

?>
Forkert kodeord.
<?

    // No password
    }
    else
    {

?>
Intet kodeord indtastet.
<?

    }

?>


--- end.php ---

<? $correctPassword = "kodeord" ?>
<?

    // Success
    if ($_SESSION["password"] == $correctPassword)
    {

?>
Kommentar: '<? print $_POST["comment"] ?>'.
<?

    // Error
    }
    else
    {

?>
Der opstod en fejl.
<?

    }
    session_destroy();

?>
Avatar billede jakobdo Ekspert
23. juni 2006 - 17:31 #15
Hvad sker der da når du bruger den kode der?
session_start(); bør du altid have øverst i din kode.
Avatar billede jakobdo Ekspert
23. juni 2006 - 17:32 #16
Og så får du et svar.
Avatar billede Slettet bruger
23. juni 2006 - 17:36 #17
Jeg prøver lige at flytte session_start(); øverst...
Avatar billede Slettet bruger
23. juni 2006 - 17:41 #18
Hm...
Det hjelp ikke.
Den retunerer stadig

Notice: Undefined variable: _SESSION in c:\program files\easyphp1-8\www\php session test\end.php on line 5
Der opstod en fejl.
Warning: session_destroy(): Trying to destroy uninitialized session in c:\program files\easyphp1-8\www\php session test\end.php on line 22

.
Avatar billede Slettet bruger
23. juni 2006 - 17:41 #19
*hjalp
Avatar billede jakobdo Ekspert
23. juni 2006 - 17:52 #20
Du mangler session_start() i din end.php, gør du ikke?
Avatar billede Slettet bruger
23. juni 2006 - 22:17 #21
Ups...
Lol, jeg antog, at Session var lige som et "globalt objekt" - at når det først var oprettet, forblev det aktivt. Men sådan er det nok ikke...
Tjekker lige...
Avatar billede Slettet bruger
23. juni 2006 - 22:21 #22
NU VIRKER DET!
Tusind tak...

Lige et kort spørgsmål til:
Hvad hvis brugeren via addressefeltet går til en anden hjemmeside og f.eks. tilbage igen - eksisterer Sessionen så stadig?
Avatar billede Slettet bruger
23. juni 2006 - 22:21 #23
Og iss og leif, smid lige nogle svar også...
Ellers går pointene bare til jakobdo.
Avatar billede iss Novice
23. juni 2006 - 22:26 #24
Jeg samler ikke på point.
Avatar billede Slettet bruger
23. juni 2006 - 22:27 #25
Okaj.
Avatar billede iss Novice
23. juni 2006 - 22:30 #26
Så længe at browseren ikke har været lukket eller session timer out er den aktiv.
Avatar billede Slettet bruger
24. juni 2006 - 07:35 #27
Hvordan får man den til at "time out"?
Avatar billede Slettet bruger
24. juni 2006 - 09:14 #28
Med cookies, går jeg ud fra...
Det må jeg lige kikke på på et tidspunkt.

Tak for hjælpen!
Avatar billede jakobdo Ekspert
24. juni 2006 - 11:07 #29
Du kunne også selv sætte en tid ind i session.
Når der logges ind, kunne du lave:
$_SESSION['action'] = time()+60;

Så vil du have tiden om 1 minut.
Så kan du tjekke om session er sat, og om tiden over $_SESSION['action'] < time() // time out.
Avatar billede jakobdo Ekspert
24. juni 2006 - 11:07 #30
Jeg takker også for point.
Avatar billede Slettet bruger
24. juni 2006 - 11:51 #31
Okaj, takker igen :)
Og selv tak ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester