Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Logowanie
kamilo818
post
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Witam,
czy taki system logowania jest bezpieczny?
Ewentualnie co jeszcze dodać/zmienić aby ulepszyć go?

login_form.php
  1. <form action="login.php" method="POST" class="form">
  2.  
  3. <input type="text" id="login"/><br>
  4. <input type="password" id="password"/><br>
  5. <input type="submit" value="Login"/>
  6.  
  7. </form>
  8.  
  9. <script>
  10. $('.form').on('submit', function(e) {
  11.  
  12. var login = $('#login').val();
  13. var password = $("#password").val();
  14. var dataString = 'login='+login+'&password='+ password;
  15.  
  16. $.ajax({
  17. type: 'post',
  18. url: ('login.php'),
  19. data: dataString,
  20.  
  21. beforeSend: function () {
  22. $('body').html('wait...');
  23. },
  24. success: function (obj) {
  25. $('body').html(obj);
  26. }
  27. });
  28.  
  29.  
  30. e.preventDefault();
  31. });
  32. </script>
  33. login.php
  34. [php]
  35. <?php
  36. $login = $_POST['login'];
  37. $password = $_POST['password'];
  38.  
  39. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  40. if(empty($login) || empty($password)){
  41. die ( 'Wypełnij wszystkie dane.' );
  42. }else{
  43. include('config.php');
  44.  
  45. connect($adres, $user, $pass, $baza);
  46.  
  47. $login = trim(strip_tags(mysqli_real_escape_string($link, $login)));
  48. $password = hash('sha1', trim(strip_tags(mysqli_real_escape_string($link, $password))));
  49.  
  50. $result = mysqli_query($link, "SELECT login,ip,mail FROM logowanie_users WHERE login='$login' AND password='$password'");
  51. $count = mysqli_num_rows($result);
  52. $row = mysqli_fetch_array($result);
  53.  
  54. $new_ip = $_SERVER['REMOTE_ADDR'];
  55.  
  56. if($count == 1){
  57.  
  58. $ip_array = explode(',',$row['ip']);
  59. if(!in_array($new_ip,$ip_array)){
  60.  
  61. $add_ip = $row['ip'].','.$new_ip;
  62. $mysql_update_ip = mysqli_query($link, "UPDATE logowanie_users SET ip='$add_ip' WHERE login='$login' AND password='$password'");
  63. echo "Logowanie z nieznanego adresu IP. W celu dodania adresu IP do zaufanych kliknij w link podany w e-mailu i zaloguj się ponownie!";
  64.  
  65. }else{
  66. $_SESSION['ip'] = $new_ip;
  67. $_SESSION['nick'] = $login;
  68. setcookie('islogged', 'islogged', time() + 3600);
  69. header('Location: userpanel.php');
  70. }
  71.  
  72. }else{
  73. echo 'Brak użytkownika w bazie';
  74. }
  75.  
  76. disconnect($adres, $user, $pass, $baza);
  77. }
  78. }
  79. ?>

register_form.php
  1. <form action="register.php" method="POST" class="form">
  2.  
  3. <input type="text" id="login"/><br>
  4. <input type="password" id="password"/><br>
  5. <input type="password" id="password_confirm"/><br>
  6. <input type="email" id="email"/><br>
  7. <input type="submit" value="Register"/>
  8.  
  9. </form>
  10.  
  11. <script>
  12. $('.form').on('submit', function(e) {
  13.  
  14. var login = $('#login').val();
  15. var email = $("#email").val();
  16. var password = $("#password").val();
  17. var password_confirm = $("#password_confirm").val();
  18. var dataString = 'login='+login+'&email=' + email + '&password=' + password + '&password_confirm=' + password_confirm;
  19.  
  20. $.ajax({
  21. type: 'post',
  22. url: ('register.php'),
  23. data: dataString,
  24.  
  25. beforeSend: function () {
  26. $('body').html('wait...');
  27. },
  28. success: function (obj) {
  29. $('body').html(obj);
  30. }
  31. });
  32.  
  33.  
  34. e.preventDefault();
  35. });
  36. </script>

register.php
  1. <?php
  2. include('config.php');
  3.  
  4. $login = $_POST['login'];
  5. $password = $_POST['password'];
  6. $password_confirm = $_POST['password_confirm'];
  7. $email = $_POST['email'];
  8.  
  9. if($_SERVER['REQUEST_METHOD'] == 'POST'){
  10. if(empty($login) || empty($password) || empty($password_confirm) || empty($email)){
  11. die ( 'Wypełnij wszystkie dane.' );
  12. }elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
  13. die ('Nie poprawny adres E-mail.' );
  14. }elseif($password!=$password_confirm){
  15. die('Hasła niezgodne!');
  16. }else{
  17. connect($adres, $user, $pass, $baza);
  18.  
  19. $login = trim(strip_tags(mysqli_real_escape_string($link,$login)));
  20. $password = hash('sha1', trim(strip_tags(mysqli_real_escape_string($link,$password))));
  21. $email = trim(strip_tags(mysqli_real_escape_string($link,$email)));
  22. $ip = $_SERVER['REMOTE_ADDR'];
  23. $now = date("Y-m-d H:i:s");
  24.  
  25. $sql = "SELECT login FROM logowanie_users WHERE login='$login'";
  26. $result = mysqli_query($link, $sql);
  27. $count = mysqli_num_rows($result);
  28. if($count!=0){
  29. die('Taki login już istnieje');
  30. }
  31.  
  32. $sql = "SELECT mail FROM logowanie_users WHERE mail='$email'";
  33. $result = mysqli_query($link, $sql);
  34. $count = mysqli_num_rows($result);
  35. if($count!=0){
  36. die('Taki e-mail już istnieje');
  37. }
  38.  
  39. mysqli_query($link,"INSERT INTO logowanie_users SET login='$login', password='$password', mail='$email',date='$now',ip='$ip'");
  40.  
  41. if(mysqli_affected_rows($link) == 1){
  42. echo 'Zostałeś pomyślnie zarejestrowany';
  43. }
  44.  
  45. disconnect($adres, $user, $pass, $baza);
  46. }
  47. }
  48. ?>

userpanel.php
  1. <?php
  2. if(empty($_COOKIE['islogged'])){
  3. header('Refresh: 2; url=login_form.php');
  4. die( 'Czas sesji wygasł. Proszę zalogować się ponownie.<br> Za chwilę nastąpi przepierowanie');
  5. }
  6.  
  7. if(isset($_SESSION['nick']) && isset($_SESSION['ip']) && $_SESSION['ip']==$_SERVER['REMOTE_ADDR']){
  8. echo '<p>Treść dla zalogowanych</p>';
  9. echo '<a href="logout.php">Wyloguj</a>';
  10. }else{
  11. echo 'Nie jesteś zalogowany. Przejdź do <a href="login_form.php">Formularza logowania</a>.';
  12. }
  13. ?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
daniel1302
post
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Myślę, że jest dobrze napisany.
Czemu nie napiszesz funkcji która będzie ci czyściła ciągi znakowe np:
  1. function quoteString($string) {
  2. return trim(strip_tags(mysqli_real_escape_string($string)));
  3. }

Ale proponuje przesiąść się na jakis adapter do bazy np PDO jak nie chcesz używać dodatkowych bibliotek.


Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


  1. $login = $_POST['login'];
  2. $password = $_POST['password'];
  3.  
  4. if($_SERVER['REQUEST_METHOD'] == 'POST') {

Zła kolejność, jak nie będzie POST to sypnie Notice


Ten post edytował Pyton_000 26.01.2015, 08:43:15
Go to the top of the page
+Quote Post
kamilo818
post
Post #4





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Dzięki panowie. Zaraz obie sugestie zastosuje.

Go to the top of the page
+Quote Post
viking
post
Post #5





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


A po co z hasła usuwasz trim i strip_tags? To może wyciąć użytkownikowi sporą ilość znaków jakie wprowadził.
Tego nie rozumiem UPDATE logowanie_users SET ip='$add_ip' WHERE login='$login' AND password='$password' Dziwna strasznie tabela.
setcookie - http only
Go to the top of the page
+Quote Post
kamilo818
post
Post #6





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Faktycznie, wogole to walidację jeszcze wprowadze hasła i loginu do tego.

'UPDATE logowanie_users SET ip='$add_ip' WHERE login='$login' AND password='$password''
To jest tak tylko testowo wprowadzone.
Docelowo ma to działać tak że jeśli user loguje się z innego ip niż jest w bazie to wyrzuca mu komunikat że ktos z takiego ip probowal sie logować i jeśli to on to musi dodać ip do zaufanych.
jak zatwierdzi to ip zostanie dodane do tabeli = UPDATE logowanie_users SET ip='$add_ip' WHERE login='$login'

setcookie - http only - już dodaje
Go to the top of the page
+Quote Post
zidek
post
Post #7





Grupa: Nieautoryzowani
Postów: 50
Pomógł: 2
Dołączył: 28.05.2013

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


eee, jak ktoś loguje się na zmianę na smartfonie, laptopie i jeszcze na PC to za każdym razem wyskoczy mu alert, że loguje się z nowego urządzenia?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Czytać umie? Stanie się tak tylko przy pierwszym logowaniu z nowego IP.

Choć fakt rozwiązanie głupie bo ktoś kto ma zmienne IP codziennie będzie miał alert.
Go to the top of the page
+Quote Post
zidek
post
Post #9





Grupa: Nieautoryzowani
Postów: 50
Pomógł: 2
Dołączył: 28.05.2013

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


Cytat(Pyton_000 @ 26.01.2015, 14:03:59 ) *
Czytać umie? Stanie się tak tylko przy pierwszym logowaniu z nowego IP.

Choć fakt rozwiązanie głupie bo ktoś kto ma zmienne IP codziennie będzie miał alert.


Lol, chyba właśnie o tym pisałem... I kto nie umie czytać :|
Go to the top of the page
+Quote Post
kamilo818
post
Post #10





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Fakt zmienne IP to bedzie niedogodność.
Ale to jest rozwiązanie do tego konkretnego przypadku.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 07:50