Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] zabezpieczenie strony
marcinek37
post 22.10.2012, 12:51:27
Post #1





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


witam,

1. zabezpieczyłem system wg wskazówek zawartych na stronach:
- http://php.pl/Wortal/Artykuly/Bezpieczenst...wa-skryptow-PHP
- http://webmade.org/porady/bezpieczenstwo-p...on-xss-csrf.php
oczywiście w internecie są setki podobnych artykułów, jednak nie wnoszą niczego nowego do dyskusji o bezpieczeństwie
czy informacje zawarte w nich są wystarczające? czy mam na coś innego zwrócić uwagę?

2. moje logowanie wygląda tak, że podaję login i hasło, system sprawdza, czy owy login jest w bazie, jeśli jest, to sprawdza, czy podane hasło po przejściu przez md5 jest zgodne z tym z bazy danych
jeśli jest powstają dwie sesje, w jednej podany jest numer ID użytkownika, a w drugiej znajduje się hasło po przejściu po funkcji md5

następnie po każdym odświeżeniu strony, system wie, że mam te dwie sesje, ale i tak je sprawdza, czy użytkownik o ID z sesji ma w bazie takie samo hasło jak te z sesji

czy to bezpieczne? czy może warto coś z tym zrobić?
Go to the top of the page
+Quote Post
nospor
post 22.10.2012, 12:53:34
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




1) Nie dwie sesje, a dwie wartości w jednej sesji.
2) Nie używaj md5 bo to już od dawna nie jest żadnym zabezpieczeniem
3) Nie widzę sensu za każdym razem sprawdzania danych sesji w tym co w bazie.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
marcinek37
post 22.10.2012, 13:08:57
Post #3





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


1. racja
2. załóżmy, że hasło administratora to QWERTYUIOP - i tak to hasło mam mieć zapisane w bazie danych? czy zakodowanie md5 nie daje już kompletnie nic? zatem jakich innych zabezpieczeń mam użyć?
3. to tylko dodatkowe zabezpieczenie, które raczej nie obciąża zbytnio serwera
Go to the top of the page
+Quote Post
nospor
post 22.10.2012, 13:10:26
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ad2) Była o tym mowa wiele razy. Jest nawet przypiety temat:
http://forum.php.pl/index.php?showtopic=44...t=0&start=0

ad3) No tak, bez sensowne latanie po bazie za każdym razem dla 10 userow moze i nie jest mulaste, ale dla większej ilości...


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Sephirus
post 22.10.2012, 13:10:40
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Jak zwykle zgadzam się z przedmówcą smile.gif

Co do pkt. 2. polecam PHPass

Jeśli chodzi o pkt. 3. to samo sprawdzanie zalogowania powinieneś sprawdzać tylko po tym czy w sesji jest informacja o zalogowaniu usera. Innymi słowy jeśli masz zalogowanego gościa to przechowujesz w sesji pod kluczem na przykład "user_id" id zalogowanego użytkownika. Jeśli taki klucz istnieje - ktoś jest zalogowany (ten którego ID jest pod tym kluczem). Trzymanie id i hasła w sesji nie dość, że jest zbędne to zupełnie nie wnosi nic nowego. Jedyna ogólna opcja aby się dostać do czyjegoś konta to poznać ID sesji tego użytkownika i ustawić odpowiednie ciasteczko - przed tym powinieneś się bronić. Jak? Możesz na przykład w sesji, po zalogowaniu zapisać dane na temat IP, User-Agent gościa. Sprawdzając czy jest ktoś zalogowany wtedy sprawdzasz czy istnieje w sesji pole z ID zalogowanego użytkownika i jeśli tak to dodatkowo sprawdzasz czy w drugiej zmiennej sesyjnej, gdzie przechowujesz info o user-agent i/lub IP, są poprawne dla aktualnie sprawdzanego użytkownika dane.

Wydaje mi się, że tyle starczy na start smile.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
marcinek37
post 22.10.2012, 13:20:18
Post #6





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


2. możesz po krótce powiedzieć, jak działa PHPass?

3. czyli ktoś się loguje, ja sprawdzam czy dane się zgadzają, jeśli tak, wykonuję taki kod:
  1. <?
  2. $_SESSION['user_id'] = $r['id']; // wiadomo, powyżej powinno być zapytanie, nie podaję go, aby było szybciej
  3. $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
  4. $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
  5. ?>


i potem, aby sprawdzić, czy ktoś jest faktycznie zalogowany, dodać:
  1. <?
  2. if(isset($_SESSION['user_id']) && $_SESSION['user_agent'] == $_SERVER['HTTP_USER_AGENT'] && $_SESSION['user_ip'] == $_SERVER['REMOTE_ADDR']){
  3. echo'zalogowany';
  4. }
  5. else{
  6. echo'niezalogowany';
  7. }
  8. ?>

Go to the top of the page
+Quote Post
Sephirus
post 22.10.2012, 13:21:20
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Ślicznie smile.gif

EDIT: Co do PHPass pobierz go po prostu - tam masz przykłady z tego co pamiętam, poczytaj i poszukaj na google o tym - jest trochę materiałów

Ten post edytował Sephirus 22.10.2012, 13:22:48


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
marcinek37
post 22.10.2012, 13:42:46
Post #8





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


sprawdzę to PHPass

2. załóżmy, że hasło administratora to QWERTYUIOP - i tak to hasło mam mieć zapisane w bazie danych? czy zakodowanie md5 nie daje już kompletnie nic? czy Wy też macie hasło w tak prosty sposób zapisane w bazie danych, czy po prostu ten problem rozwiązuje PHPass?
Go to the top of the page
+Quote Post
nospor
post 22.10.2012, 13:44:05
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
2. załóżmy, że hasło administratora to QWERTYUIOP - i tak to hasło mam mieć zapisane w bazie danych? czy zakodowanie md5 nie daje już kompletnie nic? czy Wy też macie hasło w tak prosty sposób zapisane w bazie danych,
Przecież odpowiedziałem ci już na to pytanie w moim poprzednim poście. Po co je powielasz? Podałem ci nawet linka do dość pokaźnego tematu, który wyjaśnia kwestie hashowania.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
marcinek37
post 22.10.2012, 13:48:55
Post #10





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


przepraszam za problemy, nie zrozumiałem do końca

poza tym, czy mam zwracać na coś jeszcze uwagę? mowa o tych artykułach, czy są jeszcze jakieś błędy, które zdarzają się często programistom, a mogą doprowadzić do katastrofy?
Go to the top of the page
+Quote Post
erix
post 22.10.2012, 14:39:11
Post #11





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




A przeczytałeś przyklejone wątki na forum? Wyszukiwarka nie gryzie. Tylko urywa ręce.


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

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
marcinek37
post 22.10.2012, 17:26:59
Post #12





Grupa: Zarejestrowani
Postów: 239
Pomógł: 0
Dołączył: 2.06.2011

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


1. pobrałem sobie to: http://www.openwall.com/phpass/phpass-article-3.tar.gz
i skupiłem się na katalogu demo4, który najbardziej mi odpowiadał

przykładowy kod był spory, a jego konstrukcja mi nie odpowiadała, więc skróciłem go tak:
  1. <?
  2. <?php
  3. require '../PasswordHash.php';
  4. $hasher = new PasswordHash($hash_cost_log2, $hash_portable);
  5.  
  6. // oryginalne hasło
  7. $org_pass = 'XYZ';
  8.  
  9. // funkcja, która tworzy hash dla hasła
  10. $pass = $hasher->HashPassword($org_pass);
  11.  
  12. // hash, który się utworzył
  13. $org_hash = '$P$BxAextjApHS/s1Hj01Eydd9Jfv2PSb.';
  14.  
  15. // jeśli pokaże 1, to działa dobrze
  16. $ok = $hasher->CheckPassword($org_pass, $org_hash);
  17.  
  18. // wynik
  19. echo $ok;
  20. ?>


czy dobrze zrozumiałem jego działanie?

2. żeby kod nieco skrócić, zmieniłem nieco klasę:
  1. <?
  2. class PasswordHash {
  3. var $itoa64;
  4. var $iteration_count_log2 = 8;
  5. var $portable_hashes = FALSE;
  6. var $random_state;
  7. ...
  8. ?>

bo i tak nie wiem, do czego służą te parametry, więc wpisałem je na stałe

3. jak rozumiem, każda fraza może mieć kilka/kilkanaście swoich wersji, bo gdy odświeżałem stronę dla danej zmiennej, skrypt tworzył zupełnie inny hash

4. czy coś jeszcze powinienem wiedzieć o tym skrypcie?

Ten post edytował marcinek37 22.10.2012, 17:29:50
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 Wersja Lo-Fi Aktualny czas: 17.05.2025 - 16:02