|
|
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo
|
|
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ę ? |
|
|
|
 |
|
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
|
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
|