phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

FAQFAQ - PIERWSZA POMOC!!  regulaminREGULAMIN  SzukajSZUKAJ  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj  DownloadDownload  katalog Forów DyskusyjnychKatalog Forów   FAQ Video tutoriale

Poprzedni temat «» Następny temat
Przesunięty przez: lui754
14-03-2010, 16:49
[Problem] [PHP] Logowanie i wylogowanie + kilka pyta?
Autor Wiadomość
Dj Haker

Pomógł: 13 razy
Posty: 65
Wysłany: 14-03-2010, 16:30   [Problem] [PHP] Logowanie i wylogowanie + kilka pytań

Witam.
Moja strona jest podzielona na kilka części. Sama góra nazywa się header.php i zostało w niej zawarte sprawdzanie sesji. W ten sposób działa ono na każdej podstronie. Sprawdzam czy użytkownik jest zalogowany, jeśli tak to wyświetlam napis Wyloguj, jeśli nie to wyświetlam napis Zaloguj | Zarejestruj.
Czy poniższy kod jest poprawny ?

Kod:
<?php
if(isset($_SESSION['user']) && $_SESSION['user'] != '')
{
    $login = $_SESSION['user'];
    echo("<a href=\"logout.php\">Wyloguj się $login</a>");
}
else {
echo('<a href=login.php>Zaloguj</a> |
<a href=register.php>Zarejestruj</a>');
};
?>


Osobiście wydaje mi się, że warunek sesji powinien być sprawdzany na każdej z podstron, jednak chcę aby w menu zmieniał się napis zaloguj / wyloguj więc trzeba ją sprawdzać przed zmianą tekstu. Podczas sprawdzenia sesji w każdej podstronie tekst w menu nie uległby zmianie. Proszę o sugestie.


Ponadto prosiłbym o sprawdzenie pliku login.php oraz logout.php. Otóż wiele mówi się o atakach na sesje, a ja jestem początkującym użytkownikiem nie jestem sam w stanie zabezpieczyć mechanizmu logowania tak jak należy.

Ponieważ przesyłanie php w załączniku jest niedozwolone wstawię pliki tutaj. Nie wstawiam pliku .rar ponieważ, wiem że mniej osób zaangażowałoby się w pomoc.

login.php
Kod:
<?php
session_start();
include('header.php');
include('content.php');

if(isset($_SESSION['user']) && $_SESSION['user'] != '')
{
    echo("Jesteś zalogowany");
    header("Location: index.php");
}
else
{
    if(isset($_POST['submit']))
    {
        $login = trim($_POST['login']);
        $pass = trim(md5($_POST['pass']));
        $active = 1;
        $SQL = "SELECT * FROM user WHERE login='" . $login . "' AND haslo='" . $pass . "' AND active='" . $active . "' LIMIT 1";
        $result = mysql_query($SQL);
       
        if(mysql_num_rows($result) > 0)
        {
            $_SESSION['user'] = $login;
            $sql = "UPDATE user SET online = 1 WHERE login = '$login'";
            $result = mysql_query($sql);
            header('Location: index.php');
        }
        else {
            echo "Podałeś złe dane. Jeżeli dokonałeś aktywacji konta, spróbuj ponownie";
            }
    }
   
    ?>
    <form method="post" action="login.php" />
    User: <input type="name" name="login" /> <br />
    Hasło: <input type="password" name="pass" /> <br />
    <input type="submit" name="submit" value="Zaloguj" />
    </form>
    <?php
}
echo('<a href=lostpswd.php>Zapomniałem hasła</a>');
include('footer.php');
?>


logout.php
Kod:
<?php
session_start();
include('includes/config.php');
if(isset($_SESSION['user']) && $_SESSION['user'] != '') {
$login = $_SESSION['user'];
$sql = "UPDATE user SET online = '1' WHERE login = '" .$login. "'";
$result = mysql_query($sql);
setcookie ("PHPSESSID", "", time() - 3600);
unset($_SESSION);
$_SESSION = array();
header("Location: index.php");
exit();
}
?>



Aha i jeszcze jedno. Dlaczego zapytanie do mysql w pliku logout.php nie chce się wykonać ??
 
     
Gadatliwa Kasia 

   
maminowiec


Pomógł: 551 razy
Posty: 1729
Wysłany: 15-03-2010, 17:42   

W sesji nie trzyma sie takich danych jak login , haslo etc

zawsze sprawdzaj czy jest sesja i czy pasuje do "zamka'

np
Kod:
if(isset( czy istnieje ?


a tak powinno być
Kod:

if($_SESSION['pro'] ==' %#@%@#'



$login = trim($_POST['login']);

powinno być zabezpieczone , poczytaj o SQL Injection

Kod:

$sql = "UPDATE user SET online = 1 WHERE login = '$login'";


lepiej zamiast 1 dać np time(); i poźniej sprawdzać -5 minut czy jest online , bo nie kazdy sie wylogowuje
_________________
;] Ebooki do pobrania
 
     
Dj Haker

Pomógł: 13 razy
Posty: 65
Wysłany: 16-03-2010, 17:50   

Poczytałem conieco o ataku SQL Injection. Na pewnej stronie w komentarzach przeczytałem, że jeśli na serwer będę wysyłał zaszyfrowane hasło i sprawdzał je to nie mam co się obawiać ataku ( $pass = trim(md5($_POST['pass'])); ).

Przykładowo wpisuję ' OR '1'='1 jako hasło, ale klikając wyślij tekst ten zmienia się poprzez md5 i porównywane są hasła pobrane z serwera.


Czy to prawda ?, że wykluczy to atak SQL I. ?

$login = mysql_escape_string($login); -> Czy to załatwi sprawę ?
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Kopiowanie wszelkich treści zawartych na forum, modyfikacji oraz instrukcji bez zgody administracji i autorów tematów/postów zabronione!

Powered by phpBB modified by Przemo © 2003 phpBB
Strona wygenerowana w 0,11 sekundy. Zapytań do SQL: 13
Polecane serwisy

Najlepsze oprogramowanie do prowadzenia sklepu internetowegoNajlepszy program do sklepu firmowany przez Przem'a

Sklep z gadżetami

Design Cart - Tworzenie sklepu internetowego

iRonin.IT

https://nabea.pl

• Zamów reklamę