Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt logowanie na sesjach - bezpieczny?
Forum PHP.pl > Forum > PHP
lukas743
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.
  1. if($_POST["send"] == 1) {
  2.  
  3. if(!empty($_POST["login"]) && !empty($_POST["pass"])){
  4.  
  5. if(!preg_match('/^[0-9a-zA-Z]{1,}$/', $_POST['login']) && !preg_match('/^[0-9a-zA-Z]{1,}$/', $_POST['pass'])) {
  6. $error = "Znaki które wpisałeś są niebezpieczne";
  7. } else {
  8.  
  9. if(!mysql_fetch_assoc(mysql_query("SELECT * FROM user WHERE user='".mysql_real_escape_string($_POST['login'])."' AND pass='".mysql_real_escape_string($_POST['pass'])."' "))) {
  10. $error = "Zły login lub hasło";
  11. }
  12. }
  13. }
  14. else {
  15. $error = "Nie wpisałeś loginu lub hasła";
  16. }
  17.  
  18. if(empty($error)) {
  19. $login = mysql_fetch_assoc(mysql_query("SELECT * FROM user WHERE user='".mysql_real_escape_string($_POST['login'])."' LIMIT 1;"));
  20. $_SESSION['login'] = $login['user'];
  21. }
  22.  
  23. }
  24.  
  25.  
  26. if($_SESSION['login']) {
  27. include "main.php";
  28. }
  29. else {
  30. echo "<div id='logowanie'>";
  31. echo "<form method='post' action='index.php'>";
  32. echo "Login:<br>";
  33. echo "<input type='text' maxlength='16' name='login'><br>";
  34. echo "Hasło:<br>";
  35. echo "<input type='password' maxlength='32' name='pass'><br>";
  36. echo "<input type='hidden' value='1' name='send'>";
  37. echo "<input type='submit' value='ok'><br>";
  38. echo $error;
  39. echo "<br><br><a href='index.php?page=register'>Rejestracja</a>";
  40. echo "</div>";
  41.  
  42. }
Wave
spoko ale hasła to Ty szyfruj.
croc
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.