• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

cookie, sesje, a kwestie bezpieczeństwa

0 głosów
673 wizyt
pytanie zadane 23 czerwca 2015 w PHP przez Kazuhiro Użytkownik (910 p.)
Witajcie. Żeby nie przeciągać przejdę od razu do rzeczy:

1. Jak wiadomo, cookie są przetrzymywane do komputerze lokalnym, co rodzi niezbezpieczeństwo odczytania, a może także zmodyfikowania tego pliku. Ja to robię w ten sposób, że w wartości cookie daję id usera i zaraz potem zakodowane hasło (sha1). Zakodowane (zahaszowane) hasło zawsze ma taką samą długość, więc łatwo jest także odczytać ID. Potem każdy skrypt sprawdza, czy dane z cookie są poprawnymi danymi logowania.

2. W kursie o tworzeniu skryptu logowania pewne wartości z bazy danych, np. drewno, złoto, nazwa użytkownika, itp. były przekazywane w zmiennych sesyjnych. Ja zawsze robię tak, że wysyłam jedynie ID a w pozostałych skryptach tworzę oddzielne zapytaniai wyciągam to, co jest mi w danej chwili potrzebne, Po pierwsze - wartości w bazie danych mogą ulec zmianie, a zmienna sesyjna za tym nie nadąży, np. na serwerze mamy CRONa, który zwiększa nam cyklicznie posiadane surowce. Takim układzie musiałbym za każdym razem modyfikować także zmienne sesyjne; 2 - nie wydaje mi się, żeby puszczanie samopas zbyt wielu zmiennych sesyjnych było dobrym rozwiązaniem ze wzlęgu bezpieczeństwa skryptu.

Zdaję sobie sprawę, że odcinek był czysto edukacyjny i nie sposób poruszyć w nim wszystkich kwestii ze względu na ograniczony czas. Dlatego chciałbym poszerzyć swoją wiedzę o te dwie rzeczy.

2 odpowiedzi

+3 głosów
odpowiedź 23 czerwca 2015 przez Comandeer Guru (571,300 p.)
wybrane 25 czerwca 2015 przez Kazuhiro
 
Najlepsza

NIE PRZECHOWUJ NIC POUFNEGO W COOKIES!

A jeśli przechowujesz, stosuj silny algorytm szyfrujący, np. AES.

Najlepiej w cookie trzymać jedynie id sesji a całą reszté danych na serwerze. I sprawdzaj zawsze czy IP i przeglądarka nie zmieniły się w sesji; jeśli tak, wyloguj usera.

No i cookie najlepiej słać z flagą http_only a jeśli masz SSL to koniecznie z flagą secure

komentarz 24 czerwca 2015 przez Comandeer Guru (571,300 p.)

Flaga http_only dla ciastka ograniczy możliwości przeprowadzenia tego typu ataku, jednak warto dodatkowo identyfikować przeglądarkę (w końcu sesja w Chrome na Linuksie nie zmieni się nagle w sesję w Firefoksie na Windowsie) - co zresztą Twoje obecne zapytanie robi.

 

BTW zabezpieczyłbym to zapytanie, bo zarówno w ciasteczku, jak i w nagłówku User-Agent można dostać niezłe SQLi.

komentarz 24 czerwca 2015 przez Kazuhiro Użytkownik (910 p.)
Obecne zapytanie sprawdza przeglądarkę. W razie pojawienia się innej przeglądarki, nastąpiłoby wylogowanie.

Ten skrypt jest ściągnięty z Internetu. W swoich skryptach dane wprowadzone do zapytania zwykle przepuszczam przez wyrażenia regularne, a potem na wszelki wypadek, oczyszczam z niebezpiecznego kodu. Chociaż w tym konkretnym przykładzie nie ma danych pochodzących bezpośrednio od użytkownika.
komentarz 24 czerwca 2015 przez Comandeer Guru (571,300 p.)
Jak nie ma? User-Agent jest bezpośrednio od usera. Zresztą cookie tak samo - można spreparować żądanie z odpowiednim ciasteczkiem.
komentarz 24 czerwca 2015 przez Kazuhiro Użytkownik (910 p.)
edycja 24 czerwca 2015 przez Kazuhiro
Czyli wystarczy to przepuścić przez wyrażenia regularne + jakieś metody typu addslashes, htmlentities, etc?

A może zamiast informacji o przeglądarce zapisywać po prostu IP?
komentarz 24 czerwca 2015 przez Comandeer Guru (571,300 p.)

W PHP jest tylko jeden prawdziwy sposób na ochronę przed SQLi: prepared statements.

W ostateczności jest jeszcze funkcja mysqli_real_escape_string

+3 głosów
odpowiedź 23 czerwca 2015 przez toaspzoo Dyskutant (8,280 p.)
Nigdy ale to NIGDY nie zapisuj hasła do cookies. W jakiejkolwiek postaci.

Skoro dane surowców się aktualizują (w bazie danych?) cronem, to dlaczego chciałbyś zapisywać to jeszcze do sesji? Odczytuj z bazy i tyle.
komentarz 23 czerwca 2015 przez Kazuhiro Użytkownik (910 p.)
No właśnie ja odnosiłem się do filmiku Pana Mirosława w którym stosował taką metodę.
komentarz 23 czerwca 2015 przez toaspzoo Dyskutant (8,280 p.)
Nie uwierzę póki nie zobaczę, daj proszę link do materiału ;)
komentarz 23 czerwca 2015 przez Kazuhiro Użytkownik (910 p.)
https://www.youtube.com/watch?v=Pp578w7C9hE

Tylko w tym materiale nie było mowy o cronie.
komentarz 25 czerwca 2015 przez toaspzoo Dyskutant (8,280 p.)
Masz dokładny czas, gdzie jest pokazana metoda zapisywania hasła do cookies?
komentarz 26 czerwca 2015 przez Kazuhiro Użytkownik (910 p.)
Nie mówiłem o zapisywaniu haseł do cookies, tylko o przesyłaniu wyciągniętych z bazy danych w sesji. Cookie w tym materale nie było (1:10:27)

Podobne pytania

0 głosów
1 odpowiedź 299 wizyt
pytanie zadane 18 września 2016 w PHP przez MatiiTv Gaduła (3,790 p.)
0 głosów
1 odpowiedź 138 wizyt
pytanie zadane 7 października 2018 w JavaScript przez rafal.budzis Szeryf (78,560 p.)
–1 głos
0 odpowiedzi 53 wizyt
pytanie zadane 5 grudnia 2018 w PHP przez kamiz Obywatel (1,010 p.)

88,667 zapytań

137,276 odpowiedzi

306,615 komentarzy

58,867 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...