Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> $_SESSION i Uwierzytelnianie - pytanie
MGreg
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 18.09.2007

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


Witam.
Męczę się nad bezpiecznym systemem uwierzytelniania i proszę ocenić, czy takie coś będzie bezpieczne:
  1. <?php
  2.  
  3. if(isset($_POST['login']) and isset($_POST['haslo']) and $_GET['action']=='zaloguj')
  4. {
  5. $query = mysql_query("select * from `users` where `login`='".mysql_real_escape_string($_POST['login'])."' and `haslo`='".mysql_real_escape_string(md5($_POST['haslo'])).'"');
  6. if(mysql_num_rows($query)>0)
  7.  {
  8.  $_SESSION['logged'] = 1;
  9.  $_SESSION['username'] = $_POST['login'];
  10.  }
  11. else
  12. {
  13. $_SESSION['logged']=0;
  14. {
  15. }
  16.  
  17.  if($_SESSION['logged']==1)
  18. {
  19.  /* JAKIŚ TAM PANEL ADMINISTRACYJNY */
  20. }
  21.  
  22. ?>


Głównie chodzi mi o to, czy ktoś może zmienić wartość tablicy sesji $_SESSION['logged'] na 1 i tym samym zdobyć uprawnienia admina.

Ten post edytował MGreg 4.06.2008, 17:35:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Shili
post
Post #2





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

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


Nie jest, ale czy dyrektywa session.use.cookies.only jest włączona? Jeśli nie identyfikator pójdzie przez adres w przypadku gdy cookie nie zostanie przyjęte. Także regeneracja nie jest aż tak zbędna, jakby się wydawało, chociaż dzisiaj praktycznie większość serwerów wymusza sesje przez ciacha ^^

@up
A gdzie tu masz wypisywanie jakichkolwiek danych wprowadzonych przez użytkownika?

Ten post edytował Shili 4.06.2008, 18:12:24
Go to the top of the page
+Quote Post
pyro
post
Post #3





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(Shili @ 4.06.2008, 19:10:55 ) *
Nie jest, ale czy dyrektywa session.use.cookies.only jest włączona? Jeśli nie identyfikator pójdzie przez adres w przypadku gdy cookie nie zostanie przyjęte. Także regeneracja nie jest aż tak zbędna, jakby się wydawało, chociaż dzisiaj praktycznie większość serwerów wymusza sesje przez ciacha ^^

@up
A gdzie tu masz wypisywanie jakichkolwiek danych wprowadzonych przez użytkownika?


No tak... to co pokazał autor to jest pewnie cały skrypt, prawda Shili?
Go to the top of the page
+Quote Post
LonelyKnight
post
Post #4





Grupa: Zarejestrowani
Postów: 240
Pomógł: 13
Dołączył: 1.06.2007
Skąd: Wrocław

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


Cytat(pyro @ 4.06.2008, 21:15:32 ) *
No tak... to co pokazał autor to jest pewnie cały skrypt, prawda Shili?



To jeszcze powiedz autorowi jak powinien zabezpieczyć serwer bo przecież gdzieś to musi uruchomić (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) Autor pisze o systemie autoryzacji a Ty opowiadasz o XSS jakby to miało cokolwiek wspólnego.

Wracając do tematu to zależy co rozumiesz pod słowem "bezpieczny"... Ogólnie przy systemach autoryzacji powinieneś wziąć pod uwagę jeszcze takie rzeczy jak Brute-force i zastosować np.

1. Po 3 nieudanych próbach - kolejne próby dostępne co minutę.
2. Max. 10 nieudanych prób logowania, potem blokada konta, aktywacja poprzez mail do właściciela.

Poza tym, już niezwiązane z brute-force:

1. Zastosować SSL.
2. Uważać na tzw. replay attack poprzez nieużywanie danych, które umożliwiają trwały dostęp do zasobów. Szczególnie tzw. trwały login. Jeśli już używasz takich zabawek to nie trzymać w ciastkach hasła i loginu, nawet zhashowanych, tylko zastosować dodatkowy identyfikator zamiast loginu + token zamiast hasła.
3. Przy logowaniu zastosować hasła maskowane, klawiaturę ekranową...

No i oczywiście SQL Injection.

Wszystko zależy od tego jak bardzo "bezpieczny" chcesz mieć system autoryzacji.

Jeśli chodzi bezpośrednio o kod, który podałeś to:

1. Nie używaj Select *...
2. Dodaj LIMIT do zapytania
3. Nie sprawdzaj mysql_num_rows($query)>0 tylko mysql_num_rows($query)===1 -> zalogowany
4. Dodaj ograniczenie długości dla wprowadzanego hasła i loginu.
5. Nie trzymaj w sesji nazwy użytkownika tylko np. wspomniany już losowy identyfikator...

..i to tyle z rzeczy, które teraz przyszły mi do głowy.

Ten post edytował LonelyKnight 5.06.2008, 09:36:37
Go to the top of the page
+Quote Post
pyro
post
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(LonelyKnight @ 4.06.2008, 22:02:40 ) *
To jeszcze powiedz autorowi jak powinien zabezpieczyć serwer bo przecież gdzieś to musi uruchomić (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif) Autor pisze o systemie autoryzacji a Ty opowiadasz o XSS jakby to miało cokolwiek wspólnego.


Autor pyta o ten kawałek kodu co podał, a tam NIE MA zabezpieczenia przed XSS, dlatego o tym powiedziałem.

Cytat(LonelyKnight @ 4.06.2008, 22:02:40 ) *
1. Nie używaj Select *...

Niby dlaczego nie?
Cytat(LonelyKnight @ 4.06.2008, 22:02:40 ) *
2. Dodaj LIMIT do zapytania

Co to ma dać? Dłuższe zapytanie?
Cytat(LonelyKnight @ 4.06.2008, 22:02:40 ) *
3. Nie sprawdzaj mysql_num_rows($query)>0 tylko mysql_num_rows($query)===1 -> zalogowany

W przypadku tego kawałka kodu co to za różnica? Lecz powinno się też sprawdzać czy użytkownik już istnieje.
Cytat(LonelyKnight @ 4.06.2008, 22:02:40 ) *
5. Nie trzymaj w sesji nazwy użytkownika tylko np. wspomniany już losowy identyfikator...

A co? Uważasz, że to niebezpieczne?


Cytat
Dlatego, że w niektórych przypadkach można ujawnić dane sesji użytkowników. Jeśli atakujący to zrobi i zobaczy jak sesja wygląda, co zawiera, którego użytkownika dotyczy... to będzie miał spore pole do popisu. Szczególnie trzeba uważać na współdzielonych hostingach.


To może nie używajmy wogóle baz danych, plików txtowych ani wogóle niczego, bo w niektórych przypadkach można je ujawnić?

w
Go to the top of the page
+Quote Post
LonelyKnight
post
Post #6





Grupa: Zarejestrowani
Postów: 240
Pomógł: 13
Dołączył: 1.06.2007
Skąd: Wrocław

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


Cytat(pyro @ 5.06.2008, 16:49:34 ) *
Autor pyta o ten kawałek kodu co podał, a tam NIE MA zabezpieczenia przed XSS, dlatego o tym powiedziałem.


W takim razie, powiedz mi proszę, jak chciałbyś przeprowadzić atak XSS na ten kawałek kodu, który tam jest podany.

Cytat(pyro @ 5.06.2008, 16:49:34 ) *
To może nie używajmy wogóle baz danych, plików txtowych ani wogóle niczego, bo w niektórych przypadkach można je ujawnić?


Ehh... nie mam zamiaru Cię przekonywać, chyba nie wiesz za bardzo o czym piszesz, a ja nie mam ani chęci ani czasu na takie zabawy.

Btw. pisze się "w ogóle"
Go to the top of the page
+Quote Post

Posty w temacie
- MGreg   $_SESSION i Uwierzytelnianie - pytanie   4.06.2008, 17:32:36
- - marcio   Ja bym zmienil jak juz cos jedna rzecz zamiast daw...   4.06.2008, 17:38:11
- - MGreg   Umieściłem tylko przykład, dlatego nie dodawałem e...   4.06.2008, 17:52:21
- - pyro   jeszcze zabezpieczenie przed XSS by można było ^^   4.06.2008, 17:58:16
- - Shili   Nie jest, ale czy dyrektywa session.use.cookies.on...   4.06.2008, 18:10:55
|- - MGreg   Cytat(Shili @ 4.06.2008, 19:10:55 ) @...   4.06.2008, 18:15:58
|- - pyro   Cytat(Shili @ 4.06.2008, 19:10:55 ) N...   4.06.2008, 20:15:32
|- - LonelyKnight   Cytat(pyro @ 4.06.2008, 21:15:32 ) No...   4.06.2008, 21:02:40
|- - Cotter   Cytat(LonelyKnight @ 4.06.2008, 22:02...   5.06.2008, 10:22:53
||- - LonelyKnight   Cytat(Cotter @ 5.06.2008, 11:22:53 ) ...   5.06.2008, 11:27:19
|- - pyro   Cytat(LonelyKnight @ 4.06.2008, 22:02...   5.06.2008, 15:49:34
|- - LonelyKnight   Cytat(pyro @ 5.06.2008, 16:49:34 ) Au...   6.06.2008, 12:00:38
- - Shili   Nie nie, to było do @pyro. Powinnam była wyraźniej...   4.06.2008, 18:28:19
- - Shili   Nieprawda, ale przekazywane jest tylko login i has...   4.06.2008, 20:27:34
- - MGreg   Co do XSS stosuję strip_tags(); i chyba to mi wyst...   4.06.2008, 20:54:44
- - MGreg   Zobaczcie czy teraz jest lepiej. Dodałem spra...   5.06.2008, 08:25:43
- - MGreg   Wracając do tematu... czy może ktoś obiektywnie oc...   5.06.2008, 11:49:12
- - LonelyKnight   Może być. session_regenerate_id(true) ...   5.06.2008, 12:33:43
- - wlamywacz   Nie Select * tylko wybrane pola czyli Select pole1...   5.06.2008, 16:55:39
|- - pyro   Cytat(wlamywacz @ 5.06.2008, 17:55:39...   5.06.2008, 18:44:24
- - Shili   Dalej nie ma tam żadnej wzmianki o tym, że autor c...   5.06.2008, 20:25:36
- - empathon   http://www.acros.si/papers/session_fixation.pdf P...   5.06.2008, 23:59:08


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: 27.12.2025 - 20:38