Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Logowanie na sesjach i mysql :P, Czyli mój pierwszy własny skrypt
marian2299
post
Post #1





Grupa: Zarejestrowani
Postów: 272
Pomógł: 9
Dołączył: 6.06.2009

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


Napisałem własne skrypty, działają i wgl, ale muszą zostać zabezpieczone. W związku z tym piszcie, czy napisałem w miarę ok, czy są rażące widoczne błędy, itp.
Plik logowanie.php
  1. <?php
  2. sesion_start(); //rozpoczęcie sesji
  3.  
  4. $login = mysql_real_escape_string($_POST['login']); //określenie zmiennej login, dodanie backshalsy
  5. $haslo = mysql_real_escape_string(md5($_POST['haslo'])); //określenie zmiennej haslo, dodanie backshalsy,kodowanie md5
  6.  
  7. if ($login != "" && $haslo != ""){ //sprawdzanie czy zmienne nie są puste
  8.  
  9. $zapytanie = "SELECT * FROM `uzytkownicy` WHERE login="'. $login.'" and haslo="'.$haslo.'" "; //zapytanie
  10. $uzytkownik = mysql_fetch_array(mysql_query($zapytanie) or die("Wystąpił nieoczekiwany błąd.")); //tworzymy tablicę
  11.  
  12. $_SESSION['login'] = $uzytkownik['login']; //określamy zmienną sesyjną login
  13. $_SESSION['haslo'] = $uzytkownik['haslo']; //określamy zmienną sesyjną haslo
  14. $_SESSION['id'] = $uzytkownik['id']; //określamy zmienną sesyjną id
  15. echo "Zostałeś zalogowany jako: ".$_SESSION['login'].""; //jeśli wszystko ok, wyświetlamy login
  16. }
  17. else {
  18. echo 'Podałeś błędne dane, spróbuj ponownie.'; //jeśli nie baj baj
  19. }
  20.  
  21. ?>


Czy wszystko robię ok ? Czy jest to odporne na SQJ injection ? Macie może jakieś sugestie ?
Czy w pliku tylko dla zalogowanych w zupełności wystarczy:
  1. <?php
  2. if (!isset($_SESSION['login']) || !isset($_SESSION['haslo'])) {
  3. header("location:index.php"); // Przekierowanie do index.php
  4. }
  5. ?>


Ten post edytował marian2299 17.08.2009, 00:34:12
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
radabus
post
Post #2





Grupa: Zarejestrowani
Postów: 19
Pomógł: 2
Dołączył: 17.08.2009

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


Cytat(Suh @ 19.08.2009, 21:59:31 ) *
Ponadto - i to się tyczy do Was obu - walidacja danych (IMG:style_emoticons/default/exclamation.gif) WAŻNE jest założenie, że KAŻDE dane pochodzące z zewnątrz, a szczególnie GET, POST - są niebezpieczne ! Dlatego też (tak jak wcześniej proponował fifi209) - bez wyrażeń regularnych się nie obejdzie.


@Suh: czyli samo


nie wystarczy? Najpierw trzeba wyrażeniami regularnymi sprawdzić, czy string przypadkiem nie zawiera niedozwolonych znaków i dopiero wtedy puścić go do MySQLa? Dobrze rozumiem? Bo jeśli mysql_real_escape_string nie wystarcza, to albo ja coś źle rozumiem, albo manual wprowadza w błąd (IMG:style_emoticons/default/winksmiley.jpg) Jest tam przecież napisane, że...

Cytat
tak przygotowanego łańcucha można bezpiecznie użyc w funkcji mysql_query()

Samo napisanie sprawdzenia wyrażenia regularnego dla prostego ciągu znaków jak nazwa użytkownika nie powinno być trudne (chociaż jeszcze w pełni tego nie opanowałem), ale w takim razie po co używać mysql_real_escape_string? Takie dublowanie roboty wtedy jest (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował radabus 19.08.2009, 22:42:23
Go to the top of the page
+Quote Post

Posty w temacie


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: 7.10.2025 - 11:57