Chcialbym prosic o opinie uzytkownikow na temat skryptu logowania, ktory niedawno napisalem (zalozenie bylo takie, ze calosc ma byc w jednym pliku)
Kod
<?php
error_reporting(E_ALL);
session_start();
if (!isset($_SESSION['initiated'])) { // Sprawdzam czy gosc ma juz rozpoczeta sesje
session_regenerate_id(); // Generuje nowy SSESID - unikam prostych 'Session fixation'
$_SESSION['initiated'] = 1; // Teraz juz na pewno jest sesja
$_SESSION['logged_in'] = 0; // Gosc nie jest zalogowany
}
if ($_SESSION['logged_in'] == 1) { // (*) Gosc jest zalogowany pokaz mu zasoby docelowe
echo ('42 - The answer to the Ultimate Question of Life, the Universe, and Everything'); // zasob docelowy
}
else { // Gosc nie jest zalogowany
if(isset($_POST['submit_check'])) { // Gosc wyslal formularz
$login = strip_tags($_POST['login']);
$password = strip_tags($_POST['password']);
if(check_login($login, $password)) { // Gosc podal poprawne dane
session_regenerate_id(TRUE); // Generuje nowy SSESID i usuwa stary (!) - unikam 'Session fixation'
$_SESSION['logged_in'] = 1; // Gosc jest zalogowany
header("Location: login.php"); // Odswiezam strone zeby gosc mogl zobaczyc to co jest pod (*)
}
else { // Gosc podal dane niepoprawne
echo ('Error! ');
echo ('<a href="login.php">Zaloguj jeszcze raz</a>');
}
}
else { // Gosc nie wyslal formularza
echo ('<form enctype="multipart/form-data" method="post" action="login.php">
<input type="hidden" name="submit_check" value="1"/>
<input name="login" />
<input name="password" />
<input type="submit" value="Log in" />
</form>');
}
}
function check_login($login, $password) { // Oczywiscie tutaj normalnie jest bardziej
if($login == 'adam' && $password == 'brawo') { // zawily skrypt wyciagajacy dane z bazy
return TRUE;
}
else {
return FALSE;
}
}
?>
error_reporting(E_ALL);
session_start();
if (!isset($_SESSION['initiated'])) { // Sprawdzam czy gosc ma juz rozpoczeta sesje
session_regenerate_id(); // Generuje nowy SSESID - unikam prostych 'Session fixation'
$_SESSION['initiated'] = 1; // Teraz juz na pewno jest sesja
$_SESSION['logged_in'] = 0; // Gosc nie jest zalogowany
}
if ($_SESSION['logged_in'] == 1) { // (*) Gosc jest zalogowany pokaz mu zasoby docelowe
echo ('42 - The answer to the Ultimate Question of Life, the Universe, and Everything'); // zasob docelowy
}
else { // Gosc nie jest zalogowany
if(isset($_POST['submit_check'])) { // Gosc wyslal formularz
$login = strip_tags($_POST['login']);
$password = strip_tags($_POST['password']);
if(check_login($login, $password)) { // Gosc podal poprawne dane
session_regenerate_id(TRUE); // Generuje nowy SSESID i usuwa stary (!) - unikam 'Session fixation'
$_SESSION['logged_in'] = 1; // Gosc jest zalogowany
header("Location: login.php"); // Odswiezam strone zeby gosc mogl zobaczyc to co jest pod (*)
}
else { // Gosc podal dane niepoprawne
echo ('Error! ');
echo ('<a href="login.php">Zaloguj jeszcze raz</a>');
}
}
else { // Gosc nie wyslal formularza
echo ('<form enctype="multipart/form-data" method="post" action="login.php">
<input type="hidden" name="submit_check" value="1"/>
<input name="login" />
<input name="password" />
<input type="submit" value="Log in" />
</form>');
}
}
function check_login($login, $password) { // Oczywiscie tutaj normalnie jest bardziej
if($login == 'adam' && $password == 'brawo') { // zawily skrypt wyciagajacy dane z bazy
return TRUE;
}
else {
return FALSE;
}
}
?>
Uprzejmie prosze o komentarze - najbardziej zalezy mi na krytycznych. Chodzi mi glownie o zabezpieczenie przed atakami typu Session Fixation i Session Hijacking.
Z gory dziekuje za uwagi i pozdraawiam serdecznie,
Adam