Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zabezpieczenie sesji przed wejściem osób nieporządanych
Mostrom
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 17.04.2007

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


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Temat: Bezpieczenstwo skryptow PHP


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kiler129
post
Post #3





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


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.


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
Mostrom
post
Post #4





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 17.04.2007

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


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. ?>


Ten post edytował Mostrom 17.10.2010, 18:33:16
Go to the top of the page
+Quote Post
kiler129
post
Post #5





Grupa: Zarejestrowani
Postów: 566
Pomógł: 35
Dołączył: 21.06.2006

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


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)


--------------------
flexiCMS v2 [|||||||+--] 75% done
Go to the top of the page
+Quote Post
Walian
post
Post #6





Grupa: Zarejestrowani
Postów: 124
Pomógł: 1
Dołączył: 13.07.2009

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


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ć.
Go to the top of the page
+Quote Post
Mostrom
post
Post #7





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 17.04.2007

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


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??

Ten post edytował Mostrom 19.10.2010, 18:25:42
Go to the top of the page
+Quote Post
Ramzaa
post
Post #8





Grupa: Zarejestrowani
Postów: 207
Pomógł: 17
Dołączył: 4.08.2009

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


A spróbuj bez addslashes dostal.gif
Go to the top of the page
+Quote Post
Mostrom
post
Post #9





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 17.04.2007

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


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
Go to the top of the page
+Quote Post
maniana
post
Post #10





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 18.05.2007

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 13:25