Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie sesji przed wejściem osób nieporządanych
Forum PHP.pl > Forum > PHP
Mostrom
Witam! Mam pytanie dotyczące zabezpieczenia przed ujawnieniem osobom zarejestrowanym na stronie niektórych treści, do których dostęp ma tylko admin. Jaka metoda jest bezpieczna?
W tej chwili zrobiłem to tak, że wszystkim użytkownikom, których login to "admin", pokazywane są opcje, których nie mogą ujrzeć 'uczniowie'. Jest to kwestia ingerencji w oceny, a więc bardzo ważna. Czy jest to bezpieczne?
Co proponujecie? Na ten temat nie mam zielonego pojęcia, bo nigdy nie postawiłem żadnej aktywnej strony na serwerze.
erix
Temat: Bezpieczenstwo skryptow PHP
kiler129
Cytat(Mostrom @ 16.10.2010, 18:02:00 ) *
Jest to kwestia ingerencji w oceny, a więc bardzo ważna. Czy jest to bezpieczne?
Co proponujecie? Na ten temat nie mam zielonego pojęcia, bo nigdy nie postawiłem żadnej aktywnej strony na serwerze.


Coś ostatnio modne te elektroniczne dzienniki ... z tym, że wg mnie jeśli nie masz pojęcia to nie powinieneś się brać za tak strategiczną kwestię.
A co do zabezpieczenia samego - sesje są bdb ale zamiast sprawdzać login nadaj użytkownikom id czy nazwe grupy - wtedy przypisujesz wszytkich nauczycieli pod grupe o id=0 a uczniów pod grupe id=1 a nastepnie sprawdzasz przy próbie edycji.
Mostrom
I żaden haxor nie może zmienić grupy do której należy?


Mam jeszcze pytanie dotyczące logowania się. Jaka metoda jest najlepsza? Bo ja na razie mam taki skrypt do logowania, ale on jest banalny, a nie wiem czy dobry, ale działa:
  1. <?php
  2.  
  3. function Login($komunikat=""){
  4. //formularz
  5. }
  6.  
  7. if($_SESSION["zalogowany"]=false){
  8. if(!empty($_POST["login"]) && !empty($_POST["haslo"])){
  9. $query="mysql_query("SELECT * FROM `users` WHERE `user_login` = '".htmlspecialchars($_POST["login"])."' AND user_haslo = '".htmlspecialchars($_POST["haslo"])."'")"
  10. if( mysql_num_rows($query) ){
  11. echo "Zalogowano poprawnie. <a href='index.php'>Wróć na stronę główną</a>";
  12. $_SESSION["zalogowany"]=1;
  13. }
  14. else {
  15. Login("Podano złe dane!");
  16. }
  17. }
  18. else {
  19. Login();
  20. }
  21. }
  22.  
  23. else {
  24. echo "<a href='index.php?wyloguj=tak'>Wyloguj się</a>";
  25. }
  26.  
  27. ?>
kiler129
Generalnie dobry ale poczytaj o PDO i SQL Injection bo wtedy można sobie zmienić co się chce!
Co do zmiany grupy w sesji to jedyna możliwość takiej zmiany to przechwycenie session id nauczyciela LUB dostęp do serwera (php ma w plikach sesje)
Walian
Najlepiej napisać sobie klasę obsługującą sesje. Będzie jeszcze lepiej, jeśli sesje będą oparte o bazę danych i będą takie zabezpieczenia jak:
- przysłanie ciastka tylko przez protokół HTTP
- stosowanie mysql_real_escape_string()
- regenerowanie id sesji przy każdym nowym żądaniu
- można zastosować sprawdzanie adresu IP - ale to czasami okazuje się być utrudnieniem
- można zastosować sprawdzanie USER_AGENT
- można udawać, że korzysta się z PHP-owego systemu sesji
- ograniczenie czasu "życia" sesji

Ja tam nie lubię korzystać z gotowych bibliotek - wolę napisać własną klasę, przynajmniej wiem co i jak. Jak zauważę buga to wiem gdzie szukać i jak poprawić smile.gif

  1. $_SESSION["zalogowany"]=1;

To nie jest Ci potrzebne. Sprawdzaj po prostu czy jest ustawione:
  1. if (isset($_SESSION['session_id']))

które zresztą może Ci się przydać.
Mostrom
Witam, wziałem sobie do serca to co powiedzieliście i zrobiłem coś takiego, przez co nie mogę się zalogować

Register:
  1.  
  2. mysql_query("INSERT INTO `users` VALUES (NULL, '".$login."', '".$password."')";


Login:
  1.  
  2. if(mysql_num_rows(mysql_query("SELECT * FROM `users` WHERE `user_login` = '".$login."' AND user_haslo = '".$password."'"))){
  3. //logowanie
  4. }



Rejestruję nowego użytkownika, hasło jest hashowane w md5, ale nie mogę się zalogować. Dziwne, bo hasło przy logowaniu hashuję tak samo jak przy rejestracji. Dlaczego??
Ramzaa
A spróbuj bez addslashes dostal.gif
Mostrom
Tak czy siak nie wchodzi. addslashes słyszałem, że na wszelki wypadek warto dać. Zresztą co mi szkodzi.

LOL Problem rozwiązany ;o

Powodem odrzucania hasła było ograniczenie liczby znaków dla hasła zakodowanego w md5... i obcinało w bazie danych 2 litery, dlatego się nei zgadzało ..
Pfff
maniana
Wg mnie najlepiej nie korzystać z sesji php tylko napisać własny mechanizm.
- Stworzyć tabele w bazie (memory) trzymającą nazwę sesji
- Wysyłać userowi ciacho z nazwą sesji
- porównywać ciacho z nazwą sesji z bazy

+ tego jest taki, ze masz pełną kontrolę nad wszystkim, user widzi tylko ciacho, które nic mu nie da smile.gif
Oczywiście do tego należy zastosować się po powyższych porad.
Można jeszcze zastosować się to ciasteczek HttpOnly ale to jest tylko utrudnienie a nie zabezpieczenie.
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.