Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [skrypt]Prosty skrypt logowania
Forum PHP.pl > Inne > Oceny
m3tt
Skrypcik pisany na szybko, powiedzcie co poprawić ew co dodać, żeby kod był bezpieczny.
  1. <?php
  2.  
  3. require_once('.config/db_connect.php');
  4.  
  5. //Łączę się z bazą
  6. Polacz("baza_danych");
  7.  
  8.  
  9. $login = mysql_escape_string($_POST['login']);
  10. $haslo = md5($_POST['haslo']);
  11.  
  12. //Przechowywujemy login w sesji
  13. $_SESSION['login'] = $login;
  14.  
  15.  
  16. if(!isset($_SESSION['zalogowany']))
  17. {
  18. $_SESSION['zalogowany'] = 0;
  19.  
  20. }
  21. //Jeżeli zalogowany
  22. if ($_SESSION["zalogowany"] = $_SESSION['id'])
  23. {
  24. header('Location: ./admin_panel.php');
  25. echo " Zalogowany jako: ".$_SESSION['login']. '<a href="?wyloguj">Wyloguj</a>';
  26.  
  27. if(isset($_GET['wyloguj']))
  28. {
  29. header('Location: ./index.php');
  30. $_SESSION["zalogowany"] = 0;
  31. }
  32.  
  33. }else{
  34. //Jezeli niezalogowany
  35.  
  36.  
  37.  
  38. echo '<div class="logowanie">';
  39. echo '<center><font color="red">'.$komunikat.'</font></center>';
  40. echo '<form method="post">
  41. <div class="logowanie_text">Login:&nbsp; <input type="text" class="logowanie_style" name="login"/></div>
  42.  
  43. <div class="logowanie_text">Hasło&nbsp;<input type="password" class="logowanie_style" name="haslo"/></div>
  44. <br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  45.  
  46. <input type="submit" class="logowanie_style" value="Zaloguj się :)"/></form>';
  47.  
  48. echo '</div>';
  49.  
  50.  
  51. //Sprawdź czy wysłano dane
  52. if($_SERVER['REQUEST_METHOD'] == 'POST')
  53. {
  54. //Zapytanie do bazy
  55. $sql = mysql_query("SELECT * FROM Users WHERE login='$login' and password='$haslo'");
  56. $sql2 = mysql_query("SELECT * FROM Users WHERE login='$login'");
  57. while($row = mysql_fetch_assoc($sql2))
  58. {
  59. $_SESSION['ranga'] = $row['ranga'];
  60. $_SESSION['id'] = $row['id'];
  61. $_SESSION['last_login'] = $row['last_login'];
  62. }
  63. if(mysql_num_rows($sql))
  64. {
  65. $_SESSION['zalogowany'] = mysql_num_rows($sql);
  66. header('Location: ./admin_panel.php');
  67. }else{
  68. echo '<script>alert("Złe dane")</script>';
  69. }
  70.  
  71. }
  72. }
  73. ?>
MateuszS
Z tego co wiem to na takich skryptach ćwiczą początkujący hakerzy SQL Injection...
r4xz
//Jeżeli zalogowany
if ($_SESSION["zalogowany"] = $_SESSION['id'])

hmm, tutaj jest problem ćwiczyć SQL Injection ... winksmiley.jpg

btw. ty chociaż to wrzuciłeś do testów?
webdice
Cytat(m3tt @ 6.01.2011, 16:52:59 ) *
Skrypcik pisany na szybko, powiedzcie co poprawić ew co dodać, żeby kod był bezpieczny.


Szczerze? Napisz to jeszcze raz.
m3tt
No własnie podejrzewałem, że będzie zabugowany. A możecie mi dać kilka wskazówek w pisaniu takich skryptów?
emajl22
Przede wszystkim naucz się pisać przejrzyściej kod.

  1. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

Co to jest? blinksmiley.gif

  1. require_once('.config/db_connect.php');

Czy aby na pewno to jest dobrze napisane?
ciekawskiii
  1. mysql_escape_
  2. string

Plus za checi
m3tt
Cytat(MateuszS @ 6.01.2011, 18:23:16 ) *
Z tego co wiem to na takich skryptach ćwiczą początkujący hakerzy SQL Injection...

Więc podaj mi przykład takiego ataku, bo chciałbym przetestować
darko
Przynajmniej użyj PDO i uporządkuj kod.
Fifi209
Jeżeli nie chcesz używać np. PDO tylko funkcji mysql_ to czytaj ich dokumentację.
mysql_escape_string ja wyczytałem coś takiego:
Cytat
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.


Zamiast tego użyj: mysql_real_escape_string

Co do loginu i traktowania go poprzez w/w funkcję, polecałbym bardziej przefiltrować np.
filter_var ew. zainteresować się wyrażeniami regularnymi PCRE, preg_match

To:
  1. if ($_SESSION["zalogowany"] = $_SESSION['id'])


Zapomniałeś chyba o drugim znaku równości.

Chciałbym również dowiedzieć się jak to ma działać:
  1. header('Location: ./admin_panel.php');
  2. echo " Zalogowany jako: ".$_SESSION['login']. '<a href="?wyloguj">Wyloguj</a>';

Przecież wynik "echo" nikt nie zobaczy.

Oczywiście z tymi przekierowaniami to jeden przykład a wiele błędów takich masz.

Poza tym, po co lecą dwa zapytania do bazy? Wystarczy jedno.

m3tt
Okej, dzieki wielkie. Tak jak pisałem wczesniej, skrypt pisany na szybko, nastepnym razem postaram się poprawić swoje błędy smile.gif
user767
to mój skrypt do logowania ze strony nospora, nie obiektowo napisany, do tego najlepiej poczekać na moją inwencję twórczą, aż stworzę kontrolery i opublikuje na stronie nospora w dziale skrypty użytkowników. Oczywiście, skrypt jest bezpieczny, bo nikt nie podłączy się do niego przez inny skrypt i nie wyciągnie danych, ale wymaga przepisania.
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-2024 Invision Power Services, Inc.