Avatar billede kiwankow Nybegynder
22. september 2009 - 11:51 Der er 30 kommentarer og
1 løsning

Simpel password protect ikke sikkert nok

Hej
Jeg har fundet dette simple password protect script på nettet.

Problemet er at jeg har to sider med hvert sit log ind.

Når jeg har logget ind på side1 kan jeg gå direkte til side2 uden at den spørger efter password. Den tror jeg stadig er logget ind og lægger derfor ikke mærke til at jeg faktisk er på vej ind på en side med et andet password.

Kan man gøre noget ved det.?

session_start();
$admin_user_name = "admin";
$admin_password = "pass";
//you can change the username and password by changing the above two strings
if (!isset($HTTP_SESSION_VARS['user'])) {
    if(isset($HTTP_POST_VARS['u_name']))
        $u_name = $HTTP_POST_VARS['u_name'];
    if(isset($HTTP_POST_VARS['u_password']))
        $u_password = $HTTP_POST_VARS['u_password'];
    if(!isset($u_name)) {
        ?>
        <HTML>
        <HEAD>
        <TITLE><?php echo $HTTP_SERVER_VARS['HTTP_HOST']; ?> : Authentication Required</TITLE>
        </HEAD>
        <BODY bgcolor=#ffffff>
        <table border=0 cellspacing=0 cellpadding=0 width=100%>
            <TR><TD>
            <font face=verdana size=2><B>(Kun adgang med korrekt login)</b> </font></td>
            </tr></table>
        <P></P>
        <font face=verdana size=2>
        <center>
        <?php
        $form_to = "http://$HTTP_SERVER_VARS[HTTP_HOST]$HTTP_SERVER_VARS[PHP_SELF]";
        if(isset($HTTP_SERVER_VARS["QUERY_STRING"]))
        $form_to = $form_to ."?". $HTTP_SERVER_VARS["QUERY_STRING"];
        ?>
        <form method=post action=<?php echo $form_to; ?>>
        <table border=0 width=350>
        <TR>
        <TD><font face=verdana size=2><B>Brugernavn</B></font></TD>
        <TD><font face=verdana size=2><input type=text name=u_name size=20></font></TD></TR>
        <TR>
        <TD><font face=verdana size=2><B>Password</B></font></TD>
        <TD><font face=verdana size=2><input type=password name=u_password size=20></font></TD>
        </TR>
        </table>
        <input type=submit value=Login></form>
        </center>
        </font>
        </BODY>
        </HTML>
        <?php
        exit;
    }
    else {
        function login_error($host,$php_self) {
            echo "<HTML><HEAD>
            <TITLE>$host :  Administration</TITLE>
            </HEAD><BODY bgcolor=#ffffff>
            <table border=0 cellspacing=0 cellpadding=0 width=100%>
                <TR><TD align=left>
                <font face=verdana size=2><B> &nbsp;Indtast korrekt login for at få adgang til denne side! </b> </font></td>
                </tr></table>
            <P></P>
            <font face=verdana size=2>
            <center>";
            echo "Advarsel: Du har indtastet ugyldigt brugernavn eller password!
            <B><a href=$php_self>Klik her</a></b> for at forsøge igen.<P>
            </center>
            </font>
            </BODY>
            </HTML>";
            session_unregister("adb_password");
            session_unregister("user");
            exit;
        }
        $user_checked_passed = false;
        if(isset($HTTP_SESSION_VARS['adb_password'])) {
            $adb_session_password = $HTTP_SESSION_VARS['adb_password'];
            if($admin_password != $adb_session_password)
                login_error($HTTP_SERVER_VARS['HTTP_HOST'],$HTTP_SERVER_VARS['PHP_SELF']);
            else {
                    $user_checked_passed = true;
            }
        }
        if($user_checked_passed == false) {
            if(strlen($u_name)< 2)
                login_error($HTTP_SERVER_VARS['HTTP_HOST'],$HTTP_SERVER_VARS['PHP_SELF']);
            if($admin_user_name != $u_name) //if username not correct
                    login_error($HTTP_SERVER_VARS['HTTP_HOST'],$HTTP_SERVER_VARS['PHP_SELF']);       
            if(isset($admin_password)) {
                if($admin_password == $u_password) {
                    session_register("adb_password");
                        session_register("user");
                    $adb_password = $admin_password;
                        $user = $u_name;
                }
                else { //password in-correct
                    login_error($HTTP_SERVER_VARS['HTTP_HOST'],$HTTP_SERVER_VARS['PHP_SELF']);
                }
            }
            else {
                    login_error($HTTP_SERVER_VARS['HTTP_HOST'],$HTTP_SERVER_VARS['PHP_SELF']);
            }
            $page_location = $HTTP_SERVER_VARS['PHP_SELF'];
                if(isset($HTTP_SERVER_VARS["QUERY_STRING"]))
            $page_location = $page_location ."?". $HTTP_SERVER_VARS["QUERY_STRING"];
            header ("Location: ". $page_location);
        }
    }
}
?>
Avatar billede erikjacobsen Ekspert
22. september 2009 - 12:40 #1
Hvis begge login scripts bruger de samme navne for sessionsvariabler, vil det du beskriver kunne ske.
Avatar billede kiwankow Nybegynder
22. september 2009 - 13:12 #2
Hvad foreslår du jeg gør så..??
Avatar billede erikjacobsen Ekspert
22. september 2009 - 13:35 #3
!) jeg ved ikke om det er det, der er galt
2) Hvis det er tilfældet har du to muligheder
  2a) Ændre sessionsnavne i et af login-systemerne
  2b) Lægge det på hver sit domæne - så de ikke deler sessionsvariabler
  2c) Opgive projektet ;)
Avatar billede kiwankow Nybegynder
22. september 2009 - 13:49 #4
Hvis jeg nu skal lave forskellige sessions navne, hvilke sessions skal så helt nøjagtigt ændre..?? Det er vel ikke nødvendigt at ændre dem alle.
Avatar billede dkfire Nybegynder
22. september 2009 - 14:33 #5
Måske var det en ide at finde en mere moderne kode, som tilmed er langt bedre struktureret.
Den kode du viser er gammel og meget meget ustruktureret. Den blander alt for meget html og php kode sammen.
Avatar billede erikjacobsen Ekspert
22. september 2009 - 15:38 #6
Det er vel kun nødvendigt at ændre de navne, hvor der er sammenfald, og alle steder de anvendes - men præcis hvad og hvor kan jeg ikke hjælpe med.

Ja, koden er noget rod ... efter moderne standard.
Avatar billede kiwankow Nybegynder
24. september 2009 - 11:30 #7
Jeg har nu fundet denne mere simple password protect som ikke bruger session.

Men hvordan får jeg den til gå til en anden side når login er korrekt..??

<?php
// Define your username and password
$username = "admin";
$password = "pass";
if ($_POST['txtUsername'] != $username || $_POST['txtPassword'] != $password) {
?>
<h1>Login</h1>
<form name="form" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <p><label for="txtUsername">Username:</label>
    <br /><input type="text" title="Enter your Username" name="txtUsername" /></p>
    <p><label for="txtpassword">Password:</label>
    <br /><input type="password" title="Enter your password" name="txtPassword" /></p>
    <p><input type="submit" name="Submit" value="Login" /></p>
</form>
<?php
}
else {
?>
HER SKAL DEN SÅ GÅ TIL DEN RIGTIGE SIDE
<?php
}
?>
Avatar billede erikjacobsen Ekspert
24. september 2009 - 13:05 #8
Du kan ikke lave beskyttelse med password på flere sider uden sessions-variabler.

Den kode du viser, virker kun på een og samme side.
Avatar billede kiwankow Nybegynder
24. september 2009 - 13:19 #9
Jamen den skal også kun bruges på en side. Men hvordan sender jeg den videre til den side..??
Avatar billede erikjacobsen Ekspert
24. september 2009 - 13:30 #10
Hvis du "sender den videre" til en anden side, så har du 2 sider: login siden, som du viser her, og så den side, der skal beskyttes.

Du kan bruge ovennævnte metode ved at placere indholdet af den side, der skal beskyttes på det sted hvor der står "HER SKAL DEN SÅ GÅ TIL DEN RIGTIGE SIDE"
Avatar billede kiwankow Nybegynder
24. september 2009 - 13:33 #11
problemet er bare den side der skal beskyttes er en inputform og den  submitter automatisk hvis jeg gør det på den måde
Avatar billede erikjacobsen Ekspert
24. september 2009 - 13:36 #12
Så er det jo nok fordi du ikke bare kan benytte den simple løsning, men skal have gang i sessionsvariabler.
Avatar billede kiwankow Nybegynder
24. september 2009 - 14:40 #13
kunne man ikke indsætte en session.abandon et eller andet sted så den afslutter sessionen ligeså snart man er logget ind..??
Avatar billede erikjacobsen Ekspert
24. september 2009 - 15:17 #14
Øøøøh?  Jeg kan ikke gennemskue hvad der vil være en god løsning for dig.
Avatar billede dkfire Nybegynder
24. september 2009 - 17:59 #15
Jeg tror du har misset hvad session er godt for.
Du kan IKKE holde styr på om en bruger er logget ind over flere sider uden brug af SESSION.
Et login script uden en form for session kan kun bruges på ÉN side.
Avatar billede kiwankow Nybegynder
24. september 2009 - 21:52 #16
Jamen jeg skal også kun bruge login til en enkelt side, men som jeg skrev i starten hvis jeg logger ind på mit domæne1 og senere vil logge ind på mit domæne2 så springer den login over fordi den tror jeg har logget ind da den stadig husker loginoplysningerne fra domæne1, selvom der i virkeligheden skal bruges andet brugernavn og password.
Avatar billede dkfire Nybegynder
24. september 2009 - 23:39 #17
Så skal du jo "bare" navngive dine session variabler forskelligt.
Eller have en ekstra variabel som fortæller hvilken side man er logget ind på.
Men det kan ikke passer at det er to forskellige domæner, da session ikke føres over mellem domæner.
Nyt domæne = ny session.
Avatar billede kiwankow Nybegynder
25. september 2009 - 10:32 #18
Det er måske også forkert sagt, det er godt nok to forskellige domæner men de ligger på samme webhotel, så det er altså bare url_forward. Hvordan kan man lave den ekstra variabel du snakker om...?
Avatar billede dkfire Nybegynder
25. september 2009 - 15:40 #19
Du laver bare et nyt element i din SESSION array samtidig med at du laver gemmer de andre oplysninger i din SESSION.
SESSION arrayet er lige som andre array's, dog er der den forskel at den knytter sig til den session som brugerens browser opretter.
Avatar billede kiwankow Nybegynder
25. september 2009 - 20:43 #20
hmm tror det ville være meget nemmere med noget password protect uden session eller skal jeg jo ændre i filerne hver eneste gang jeg bruger scriptet igen. Der må da findes password protect uden brug af sessions..??
Avatar billede dkfire Nybegynder
25. september 2009 - 21:54 #21
Du skal vel ændre password og brugernavn hver gang du vil bruge scriptet ?
Avatar billede dkfire Nybegynder
25. september 2009 - 21:57 #22
Dernæst kan du bruge variabler fra serveren så du IKKE behøver ændre noget når du flytter scriptet rundt på andre sider.
Avatar billede kiwankow Nybegynder
25. september 2009 - 22:55 #23
brugernavn og password angiver man selv som variabler i cms systemet
Avatar billede dkfire Nybegynder
25. september 2009 - 23:11 #24
Hvis du har et cms system men du ikke bruger session ? Hmm kan jeg ikke lige få til at hænge sammen.
Men så kan du jo også ved samme lejlighed lige sætte hvilken server brugernavn og password passer til.
Samt når man logger ind, så sætter du lige en session variabel om hvilken server man er logget ind på, og når du så tjekker om brugeren er logget ind for at se hemmeligt indhold, så tjekker du da også lige om den rigtige server er sat i session.
Avatar billede kiwankow Nybegynder
26. september 2009 - 10:22 #25
OK nu skal forsøge at forklare det så godt som muligt. På min server har jeg flere forskellige mapper indeholdende nøjagtig ens hjemmesider, som på sigt skal lejes ud. Jeg har lavet en php side der på en måde fungerer som cms system og altså ikke er et rigtig cms system. På siden kan man ændre farver, fonte osv. i stylesheetet. Værdierne gemmes i en anden fil variable.php. Første gang man logger ind er der sat et standard brugernavn og password som man så kan ændre i samme cms system og værdierne gemmes i samme variable.php. Sådan som det fungerer nu kan man logge sig ind i sit cms system og ændre på opsætningen, men hvis man først har logget sig ind og derefter klikker ind på en anden mappe/hjemmeside kan man få adgang til dennes cms uden at logge ind fordi den tror man allerede er logget ind selvom brugernavn og password er ændret..

Håber det gav mening..!! :-)
Avatar billede dkfire Nybegynder
26. september 2009 - 11:54 #26
dvs, du har ikke flere forskellige domæner som du prøver på, du har "kun" forskellige mapper ?

Da disse mapper ligger under samme domæne, kan session ikke se at den skal ændres/slet, og derfor vil session blive bevaret på tværs af dine mapper. Det er sådan set hele ideen med session.
Hvis du derimod forsøger at tilgå forskellige domæner, som godt nok ligger på samme server, så vil sessionen blive til en ny session hver gang du skifter domæne.

Men igen, ved at tilføje lidt ekstra information når en bruger logger ind og tjekke denne information når du på dine sider tjekker om brugeren er logget lidt, kan du sagtens gøre som du vil.
Den ekstra information kan være mappe navnet eller domænenavnet.
Avatar billede kiwankow Nybegynder
26. september 2009 - 12:25 #27
Vil det være nok nor der kommer url forward på de forskellige mapper eller er det ikke nok for at skelne mellem sessionerne..??
Avatar billede dkfire Nybegynder
26. september 2009 - 12:27 #28
Det skal jeg ikke kunne sige. Jeg har ingen erfaring med det.
Avatar billede kiwankow Nybegynder
27. september 2009 - 11:27 #29
Smid nogle svar så forsøger jeg at finde noget hjælp til sessions :-)
Avatar billede erikjacobsen Ekspert
27. september 2009 - 11:45 #30
Du skal vel ikke kigge længere end indlæg #6 - sørg for der ikke er sammenfald i navnene i de sessionsvariabler, der bruges i de to login-systemer.
Avatar billede dkfire Nybegynder
27. september 2009 - 12:49 #31
Et svar fra mig, så kan du vælge at bruge det eller ej
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