Avatar billede krydset Nybegynder
30. august 2003 - 11:17 Der er 46 kommentarer og
2 løsninger

beskytte sider med sessions

hejsa eksperter.

Jeg har lavet et login script som virker, og er nu ved at udbygge det med sessions, meeen det funger ik rigtigt.

har 3 sider.

//login_script.php //tjekker bruger og pass samt starter sessionen

<?PHP
session_start();
// Variabler
    $submit      =  $_POST["submit"];
    $bruger_navn =  $_POST["bruger_navn"];
    $pass_word1  =  $_POST["pass_word"];
    $pass_word  =  md5($pass_word1);
    $_SESSION['name'] = $_POST['bruger_navn'];
   
include("dbconnect1.php");


// Hvis submit knappen log_ind ikke eksisterer, brokker den sig
    if (!isset($submit)) {
        echo "Du skal komme fra log ind siden!<br>";
        echo "<a href=\"logind.htm\">Gå til log ind siden</a>";
    }

    $tjek = mysql_query("SELECT id FROM brugere WHERE bruger_navn = '$bruger_navn' AND pass_word = '$pass_word'")or die(mysql_error());

    $antal = mysql_num_rows($tjek);

    if ($antal == 1) {
        $_SESSION['name'];
        print "hej $_SESSION[name] du er nu logget ind";
    }else{
        echo "Du kunne ikke logges ind :o(";

    }
?>

<link rel="stylesheet" type="text/css" href="../style/style2.css">

så har jeg tjeklogin.php //som gerne skulle tjekke om brugeren er logget ind

<?PHP
session_start();
if ($_SESSION['name'] == 1) {
header("Location:http://www.jubii.dk");//kun test url
} else {
    echo 'du er ikke logget ind';
    exit();
}

?>


og til sidst en beskyttet side som skulle referere til tjeklogin.php

<?PHP
require("../test/tjeklogin.php");
?>
<link rel="STYLESHEET" type="text/css" href="../style/style2.css">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
    <title>Untitled</title>

</head>

<body>
<h3><center>KONTAKT</center></h3>
Kontakt info
<a href="mailto:tlarsen@pc-dk.dk">Send en mail</a>
<p>
<a href="http://wwp.icq.com/scripts/contact.dll?msgto=113718347">Kontakt på icq</a>

<p>
Msn Tlarsen@pc-dk.dk


</body>
</html>

nogen der ved hvorfor det ikke virker??

Mvh //krydset
Avatar billede ohmish Nybegynder
30. august 2003 - 11:18 #1
hvordan virker det ikke - helt præcist?
Avatar billede krydset Nybegynder
30. august 2003 - 11:19 #2
fejlern er at den siger hele tiden "du er ikke logget ind" så det må være tjeklogin.php der ikke er som den skal være
Avatar billede squashguy Nybegynder
30. august 2003 - 11:20 #3
uden at have kigget det grundigt igennem, synes jeg du har en fejl her:

if ($antal == 1) {
        $_SESSION['name']; // mangler noget
...

ændres til $_SESSION['name'] = 1;
Avatar billede ohmish Nybegynder
30. august 2003 - 11:22 #4
tjeklogin.pgp burde vel også checke i databasen, som login_script.php gør det
Avatar billede tipsen Nybegynder
30. august 2003 - 11:23 #5
Godt at se, at du har rettet "brugernavn" fejlen, selvom "det ikke var en fejl" ;-)
Avatar billede whatever Nybegynder
30. august 2003 - 11:25 #6
ohmish > tjeklogin.php skal netop kun tjekke at et bestemt session eksisterer. Hvis den skulle tjekke op mod databasen, skulle både brugernavn og kodeord gemmes i sessions.
Avatar billede whatever Nybegynder
30. august 2003 - 11:26 #7
squashguy > der skal være to ==, det andet er ikke muligt i PHP. Se http://dk.php.net/manual/en/language.operators.comparison.php
Avatar billede whatever Nybegynder
30. august 2003 - 11:28 #8
krydset > Hvad er det brugernavn du logger ind med?

Følgende kode tjekker om brugernavnet i session er 1

<?PHP
session_start();
if ($_SESSION['name'] == 1) {
header("Location:http://www.jubii.dk");//kun test url
} else {
    echo 'du er ikke logget ind';
    exit();
}

?>

Scriptet skal vel bare tjekke om $_SESSION['name'] eksisterer.

<?PHP
session_start();
if ($_SESSION['name']) {
header("Location:http://www.jubii.dk");//kun test url
} else {
    echo 'du er ikke logget ind';
    exit();
}

?>
Avatar billede tipsen Nybegynder
30. august 2003 - 11:28 #9
squash: Hvad har du kodet før PHP?
Avatar billede whatever Nybegynder
30. august 2003 - 11:29 #10
Evt. sådan:

<?PHP
session_start();
if (isset($_SESSION['name']) && !empty($_SESSION['name'])) {
header("Location:http://www.jubii.dk");//kun test url
} else {
    echo 'du er ikke logget ind';
    exit();
}

?>
Avatar billede squashguy Nybegynder
30. august 2003 - 11:30 #11
ja, jeg snakker om at tildele $_SESSION['navn'] en værdi
Avatar billede krydset Nybegynder
30. august 2003 - 11:30 #12
>> tipsen hehe var meget træt og forvirret igår.

>> ohmish tjeklogin skal kun tjekke om der findes et navn i sessionen, ved ikke om jeg er rigtigt på den.
Avatar billede squashguy Nybegynder
30. august 2003 - 11:31 #13
$_SESSION['name'];

tildeler ingen værdi
Avatar billede squashguy Nybegynder
30. august 2003 - 11:34 #14
under login, har glemmer du at smide brugernavn fra databasen over i denne variablen
Avatar billede ohmish Nybegynder
30. august 2003 - 11:35 #15
$_SESSION['name'] bliver aldrig sat til 1.

i tjeklogin checker du om $_SESSION['name'] er 1.

ergo kan man aldrig ryge videre til jubii, og vil altid få beskeden "du er ikke logget ind".
Avatar billede krydset Nybegynder
30. august 2003 - 11:36 #16
WEEEEE WHATEVER

det var bare det her der skulle til

<?PHP
session_start();
if ($_SESSION['name']) {
header("Location:http://www.jubii.dk");//kun test url
} else {
    echo 'du er ikke logget ind';
    exit();
}

?>
u are god!!
Avatar billede krydset Nybegynder
30. august 2003 - 11:38 #17
kan du ikke prøve her engang www.pc-dk.dk og oprette og logge ind.

Og ved godt siden er lilla vl ikke høre det mere *GG* :-D
Avatar billede squashguy Nybegynder
30. august 2003 - 11:38 #18
krydset, du mangler dog stadig at smide brugernavnet fra databasen over i din sessionvariabel
Avatar billede krydset Nybegynder
30. august 2003 - 11:42 #19
hvorfor skal den med
Avatar billede squashguy Nybegynder
30. august 2003 - 11:43 #20
jeg går ud fra du bruger den...

print "hej $_SESSION[name] du er nu logget ind";
Avatar billede krydset Nybegynder
30. august 2003 - 11:43 #21
for hvis du ikke logger ind med det rigtige bruger og pass bliver sessionen ikke sat
Avatar billede krydset Nybegynder
30. august 2003 - 11:43 #22
ja
Avatar billede whatever Nybegynder
30. august 2003 - 11:44 #23
Denne linie  $_SESSION['name'] = $_POST['bruger_navn']; burder flyttet til

    if ($antal == 1) {
        $_SESSION['name'] = $_POST['bruger_navn'];
        print "hej $_SESSION[name] du er nu logget ind";
Avatar billede squashguy Nybegynder
30. august 2003 - 11:46 #24
havde slet ikke set den var sat helt der op.. hehe det var vist en sikkerhedsbrist af karakter :)
Avatar billede krydset Nybegynder
30. august 2003 - 11:47 #25
kan godt se at man bare kan skrive et forkert bruger og pass og alligevel se beskyttet side ;-(
Avatar billede krydset Nybegynder
30. august 2003 - 11:50 #26
Sådan nu er sikkerhed hullet fjernet. :-D
Avatar billede squashguy Nybegynder
30. august 2003 - 11:51 #27
når vi nu snakker om sikkerhed, så indtast dette som password:

1' or '1

og du vil altid kunne logge ind
Avatar billede krydset Nybegynder
30. august 2003 - 11:53 #28
så var jeg ikke helt forkert på den.

og lige en anden ting

i de sider der bliver beskyttet med require() kan jeg ikke sætte den her linie ind i

for.eks kontakt.php
kan jeg ikke sætte den her linie i øverst
<link rel="STYLESHEET" type="text/css" href="style.css">
og hvis jeg sætter den under phpkoden bliver den ikke læst pga exit() i tjeklogin.php og fjerner jeg exit() er der adgang igen. nogen der har et bud på det problem
Avatar billede krydset Nybegynder
30. august 2003 - 11:54 #29
>>squashguy Prøv engang
Avatar billede squashguy Nybegynder
30. august 2003 - 11:58 #30
det er så fordi du har if($antal == 1), dette password returnerer alle brugere. giv mit lige et eksisterende brugernavn
Avatar billede krydset Nybegynder
30. august 2003 - 11:59 #31
medieburner eksistere
Avatar billede squashguy Nybegynder
30. august 2003 - 11:59 #32
problemet er, at du er åben for sql injection
Avatar billede krydset Nybegynder
30. august 2003 - 12:01 #33
sql a hva for en fisk??? *GG*
der var lige et nyt ord
Avatar billede whatever Nybegynder
30. august 2003 - 12:03 #34
Prøv dette istedet:

    $tjek = mysql_query("SELECT pass_word FROM brugere WHERE bruger_navn = '$bruger_navn'")or die(mysql_error());

    if (mysql_num_rows($tjek) > 0) {
        list($db_password) = mysql_fetch_row($tjek);
    if ($db_password === $pass_word) {
        $_SESSION['name'] = $bruger_navn;
            print "hej $_SESSION[name] du er nu logget ind";
        } else {
            echo "Du kunne ikke logges ind :o(";
    }
    } else {
        echo "Du kunne ikke logges ind :o(";
    }
Avatar billede krydset Nybegynder
30. august 2003 - 12:04 #35
hvad forskel gør det??
Avatar billede krydset Nybegynder
30. august 2003 - 12:09 #36
>>>whatever hvad foskel gør det du har skrevet
Avatar billede krydset Nybegynder
30. august 2003 - 12:18 #37
hallo
Avatar billede squashguy Nybegynder
30. august 2003 - 12:48 #38
ok, du må have, magic_quotes_gpc = on, i din php.ini; hvilket automatisk omdanner ' til \' ved submit. Det udskadeliggør i denne omgang sql injection.

Eksempel på injection. tag denne sætning:
SELECT * FROM tabel WHERE pass = '$password'

og indtast password: 1' or '1
det giver denne sætning:

SELECT * FROM tabel WHERE pass = '1' or '1'

som du nok kan se er farligt: returnerer alle poster.

med magic_quotes_gpc = on, bliver det dog til
SELECT * FROM tabel WHERE pass = '1\' or \'1'

hvilket ikke er farligt.

http://www.google.dk/search?q=sql+injection hvis du vil vide mere
Avatar billede squashguy Nybegynder
30. august 2003 - 12:50 #39
i dit tilfælde ville det dog heller ikke nogensinde være muligt, at lave injection på password feltet, da du omdanner dette til en hash først. Men brugernavnet ville være en kandidat.
Avatar billede krydset Nybegynder
30. august 2003 - 12:50 #40
ahh ok, så jeg er ikke udsat for det

kan du ikke hjælpe med det jeg skrev her
Kommentar: krydset
30/08-2003 11:53:35

vil lige læse om det
Avatar billede squashguy Nybegynder
30. august 2003 - 13:04 #41
tjeklogin.php villle jeg nok lave sådan:

<?php
if(!er brugeren logget ind){
  // brugeren er IKKE logget ind
  header("location: ikke-logget-ind.php");
  exit();
}
?>
Avatar billede krydset Nybegynder
30. august 2003 - 13:18 #42
hvis jeg sætter Warning: Cannot send session cache limiter - headers already sent (output started at /home/administrator/www/sider/kontakt.php:2) in /home/administrator/www/test/tjeklogin.php on line 2
over phpkoden i kontakt.php får jeg denne her fejl

Warning: Cannot send session cache limiter - headers already sent (output started at /home/administrator/www/sider/kontakt.php:2) in /home/administrator/www/test/tjeklogin.php on line 2

Warning: Cannot add header information - headers already sent by (output started at /home/administrator/www/sider/kontakt.php:2) in /home/administrator/www/test/tjeklogin.php on line 6
Avatar billede krydset Nybegynder
30. august 2003 - 14:08 #43
har fået det til at virke :-D
Avatar billede krydset Nybegynder
31. august 2003 - 00:45 #44
er der nogen der vil ligge et svar her?? ihvertfald squash og whatever :-D
Avatar billede squashguy Nybegynder
31. august 2003 - 14:54 #45
bare i orden :)
Avatar billede krydset Nybegynder
31. august 2003 - 18:05 #46
så mangller vi bare whatever
Avatar billede whatever Nybegynder
31. august 2003 - 18:20 #47
svar
Avatar billede krydset Nybegynder
31. august 2003 - 18:24 #48
rart med noget response, kan i hygge og takker
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