Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Logowanie i zabezpieczenia
snerf
post
Post #1





Grupa: Zarejestrowani
Postów: 74
Pomógł: 3
Dołączył: 30.03.2014

Ostrzeżenie: (0%)
-----


Witam

napisałem sobie prosty skrypt logowania i starałem się zabezpieczyć sesję póki co się sprawdza lecz nwm czy to jest w pełni bezpieczne rozwiązanie:

  1. <?php
  2. class user{
  3. public $pdo;
  4. public $timeout; public $timeout_active;
  5. public $last_visit_time;
  6. public $prefix_mysql;
  7.  
  8. public function pdo($pdo, $time, $time_activ, $prefix_mysql)
  9. {
  10. $this->pdo = $pdo;
  11. $this->timeout = $time;
  12. $this->timeout_active = $time_activ;
  13. $this->prefix_mysql = $prefix_mysql;
  14. }
  15.  
  16. public function login($name, $password)
  17. {
  18. $pdo = $this->pdo;
  19. try{
  20. $password_sel = set_password($password);
  21. $stmt = $pdo -> prepare('SELECT id, password FROM `'.$this->prefix_mysql.users.'` WHERE username = :user OR email = :user LIMIT 1');
  22. $stmt -> bindValue(':user', $name, PDO::PARAM_STR);
  23. $stmt -> bindValue(':pass', $password_sel, PDO::PARAM_STR);
  24. $stmt -> execute();
  25. $count = $stmt->rowCount();
  26. }catch(PDOException $e){
  27. $display = 'Błąd zapytania:<br> ' . $e->getMessage();
  28. }
  29. $row = $stmt -> fetch();
  30. $user_id = $row['id'];
  31. if($count == 1){
  32. if(check_password($password, $row['password'])){
  33. $display = 'Zalogowano';
  34. $seskey = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
  35. $this->last_visit_time = time()+$this->timeout_active;
  36. $stmt = $pdo -> prepare('UPDATE `'.$this->prefix_mysql.users.'` SET `session_key` = :seskey, `time_activ` = :date WHERE `id` = :user_id');
  37. $stmt -> bindValue(':date', $this->last_visit_time, PDO::PARAM_INT);
  38. $stmt -> bindValue(':seskey', $seskey, PDO::PARAM_STR);
  39. $stmt -> bindValue(':user_id', $user_id, PDO::PARAM_INT);
  40. $stmt->execute();
  41. $_SESSION['last_active'] = time();
  42. $_SESSION['owner_ses'] = $seskey;
  43. $_SESSION['user_id'] = $user_id;
  44. }else{
  45. $display = 'Dane nie prawidłowe.';
  46. }
  47. }else{
  48. $display = 'Takie konto nie istnieje.';
  49. }
  50. return $display;
  51. }
  52.  
  53. public function check($ost_activ)
  54. {
  55. if(!empty($_SESSION['user_id']) && !empty($_SESSION['owner_ses'])){
  56. $timeout = $this->timeout;
  57. $owner_ses = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
  58.  
  59. if ((isset($_SESSION['last_active']) && $_SESSION['last_active']<(time()-$timeout))
  60. || (isset($_SESSION['owner_ses']) && $_SESSION['owner_ses']!=$owner_ses))
  61. {
  62. setcookie(session_name(), '', time()-3600, '/');
  63. header('Location: index.html');
  64. }else{
  65. $_SESSION['last_active'] = time();
  66. $_SESSION['owner_ses'] = $owner_ses;
  67. if($ost_activ < time()){
  68. $this->last_visit_time = time()+$this->timeout_active;
  69. $pdo = $this->pdo;
  70. $stmt = $pdo -> prepare('UPDATE `'.$this->prefix_mysql.users.'` SET `time_activ` = :date WHERE `id` = :user_id AND `session_key` = :seskey');
  71. $stmt -> bindValue(':date', $this->last_visit_time, PDO::PARAM_INT);
  72. $stmt -> bindValue(':seskey', $owner_ses, PDO::PARAM_STR);
  73. $stmt -> bindValue(':user_id', $_SESSION['user_id'], PDO::PARAM_INT);
  74. $stmt->execute();
  75. }
  76. }
  77. }
  78. }
  79. }
  80.  
  81. $user_class = new user;
  82. $user_class->pdo($pdo,$config['login_time'],$config['login_active_time'], $prefix_mysql);
  83.  
  84. $login = $user_class->login($_POST['email'], $_POST['password']);
  85.  
  86.  
  87. ?>


Jak jeszcze mogę zabezpieczyć logowanie? czy posiada jakieś błędy których nie zauważyłem? chciałbym być pewny przed wydaniem publicznie stronki.

mam nadzieje że to dobry dział, jak nie to przepraszam i prosze o poprawkę smile.gif
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 09:14