Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LoggedIn?
Forum PHP.pl > Forum > PHP
Spirit86
Witajcie, ostatnimi czasy chciałem zmienić mój CMS. Zmieniam teraz funkcję sprawdzającą czy dany użytkownik jest zalogowany. Wymyśliłem sobie takie coś: przy ładowaniu strony sprawdzam, czy jest ustawione są zmienne nick, pass. Czy uważacie, że jeżeli później będę spradzał, czy istnieje stała LoggedIn to będzie bezpieczne? Wydaje mi się, że stałe są bezpieczne, bo można je definiować tylko w HTML, a zmienne zawsze można oszukać, jak się np. gdzies jej odpowiednio nie sprawdzi(ktoś może użyć _POST).

  1. <?
  2. $nick = add_slashes($nick);
  3. $pass= add_slashes($pass);
  4. if(isset($nick) AND isset($pass) AND !isset(LoggedIn)){
  5. $db->query(&#092;"SELECT * FROM '$user_db' WHERE nick='$nick' AND pass='$pass'\");
  6. if($db->num_rows()==1) define('LoggedIn', true); //define if somebody is logged in.
  7. $db->close();
  8.  
  9. }
  10. ?>
DeyV
define nie zapamięta tej informacji na dłuższy czas.
W zwiazku z tym należy korzystać z sessji, a poza tym zawsze odwoływać się do zmiennych super globalnych, typu $_SESSION, $_GET, $_POST


temat przenoszę z php pro -> php
krzemian
Hmm, ja takie rozwiązanie zastosowałem ostatnio u siebie i sądzę, że jest dobre, jeśli chodzi o np. panel admina. Po pomyślnym zalogowaniu, w powłoce panelu admina (sterującą wszystkimi podpanelami) ustawiam stałą (na wzór IN_PHPBB w phpbb), a w tych podpanelach (poszczególnych funkcjach administratorskich rozsianych po plikach) sprawdzam, czy została zdefiniowana odpowiednia stała.
bigZbig
Tak uzyta deklaracja stalej nie rozwiazuje problemu bezpieczenstwa logowania bo.

1. Glowne zagrozenie pojawia sie na etapie odczytywania zmiennych $nick i $pass z formularza. Nalezy tak skonstruowac formularz i obslugujacy go skrypt aby nie dalo sie przeprowadzic tak zwanego SQL Injection/Insertion, a Twoja stala LoggedIn pojawia sie juz po przeprowadzeniu procesu uwierzytelniania.

2. Powtórze za DeyV, ze Twoja stala zostanie zdefiniowana jedynie na czas pojedynczego wywolania skryptu, tak wiec pozostaje jeszcze kwestia przenoszenia wartosci stalej na kolejne wywolania np. po przejsciu na kolejna podstrone bo w przeciwnym przypadku bedziesz musial powtarzac logowanie za kazdym razem, jak tylko przejdziesz na kolejna podstrone Twojego serwisu. Jesli zatem uzyjesz sesji lub ciasteczek twoja stala tak czy inaczej zamieni sie w zmienna.

Ponadto uzycie wartosci logicznych dla LoggedIn postawi Cie jeszcze przed problemem Autoryzacji.
Spirit86
wiem, zauważyłem już błąd rozumowania,
gdy logują się kolejni userzy, stała jest ciągle zmieniana biggrin.gif. Użyłem sesji, a stałej dla bezpieczeństwa również jak PHPBB winksmiley.jpg
krzemian
No właśnie:] Zapomniałem dodać, że wszystko oczywiście mam na sesjach, a dopiero w panelu dla ułatwienia tworzę tą stałą, kod jest wtedy czystszy. A co do SQL Injection to już inna sprawa.
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.