lukas743
21.06.2010, 22:34:55
Witam. Napisałem skrypt logowania. Może ktoś mi powiedzieć czy skrypt jest bezpieczny? Czytałem o Session Poisoning, Session fixation, Session injection i sql injection i wprowadziłem małe zmiany.
if($_POST["send"] == 1) {
if(!empty($_POST["login"]) && !empty($_POST["pass"])){
if(!preg_match('/^[0-9a-zA-Z]{1,}$/', $_POST['login']) && !preg_match('/^[0-9a-zA-Z]{1,}$/', $_POST['pass'])) { $error = "Znaki które wpisałeś są niebezpieczne";
} else {
$error = "Zły login lub hasło";
}
}
}
else {
$error = "Nie wpisałeś loginu lub hasła";
}
$_SESSION['login'] = $login['user'];
}
}
if($_SESSION['login']) {
include "main.php";
}
else {
echo "<div id='logowanie'>"; echo "<form method='post' action='index.php'>"; echo "<input type='text' maxlength='16' name='login'><br>"; echo "<input type='password' maxlength='32' name='pass'><br>"; echo "<input type='hidden' value='1' name='send'>"; echo "<input type='submit' value='ok'><br>"; echo "<br><br><a href='index.php?page=register'>Rejestracja</a>";
}
Wave
21.06.2010, 23:10:27
spoko ale hasła to Ty szyfruj.
croc
22.06.2010, 11:22:07
Na pewno niezbyt rozsądne jest używanie funkcji empty. W ogóle dziwna jest ta funkcja wg mnie. Ktoś wpisze "0" i skrypt uzna, że nic nie wpisał. Lepiej działaj z isset. Samo kliknięcie w przycisk "zaloguj" należy już uznać za próbę logowania - obojętne czy użytkownik wpisał cokolwiek czy nie (a już na pewno jak wpisał sobie "0").
A do samej sesji nie lepiej wziąć ID użytkownika?
Poza tym kod wywala błąd o niebezpiecznych znakach tylko wtedy, gdy są one i w loginie i w haśle. A tak w ogóle to dlaczego jakiekolwiek znaki w haśle są niebezpieczne? Zamierzasz je trzymać niezaszyfrowane w bazie? Używanie znaków specjalnych w haśle to genialny pomysł, a ty tego zabraniasz użytkownikowi.
Dalej mi się nie chce analizować, bo kod jest generalnie mówiąc nieładny.