![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
Pytanie nietypowe, nie chce koła chce dętkę.
Od paru dni myślę nad podniesieniem mojego poziomu php na wyższy, jako że nadal jestem początkującym chciałbym teraz zrobić system logowania i rejesracji jednak problemem jest dla mnie za mała wiedza o sesjach. Nie znalazłem dostatecznych źródeł informacji na temat sesji (według mnie), a pytanie na którym się zatrzymuję; Jak można przechowywać sesję przechodząc na inną stronę? oraz tak jak pisałem na samej górze, nie chce dostać całego systemu logowania i rejestracji tylko sam szkielet jak to ma mniej więcej wyglądać (chodzi tylko o sesje) oraz ewentualne (miło by było) pokazanie np. "tu hashuj hasła", "tu sprawdź czy już istnieję", "Tu dane dla zalogowanego" itd. (Jako że jest to forum "Przedszkole" a ja będę to pisał pierwszy raz) mam nadzieję że dobrze zadałem pytanie, jakby ktoś nie zrozumiał to proszę komentować. edit: ps. będę pisał to z pomocą PDO bo tylko tego się uczyłem więc prosiłbym nie zamykać tematu bo może będę miał pytania w przyszłości jakby coś nie wyszło. edit 2 - Jeszcze jedno: W bazie wystarczy `id`, `nick`, `haslo` czy jeszcze coś będzie mi potrzebne? Ten post edytował nospor 23.04.2014, 09:51:44 -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Co do samego skryptu logowania i rejestracji napisałem takowy kiedyś na swoim blogu.
#edit, w artykule napisałem co nieco o sesji ![]() Cytat Jak można przechowywać sesję przechodząc na inną stronę? W każdym pliku, w którym sesja ma być aktywna, trzeba dać na wstępie session_start(). Tym sposobem sesja sobie istnieje w tle przechodząc między stronami. Cytat W bazie wystarczy `id`, `nick`, `haslo` czy jeszcze coś będzie mi potrzebne? Wystarczy, to absolutne minimum. W zależności od upodobań można dodać np. adres e-mail, datę rejestracji, typ konta (admin/użytkownik itd.), ostatnie logowanie etc. Ten post edytował Turson 19.04.2014, 13:24:53 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
Tak jak pisałem mogę mieć pytania i mam już pierwsze
--BEZPIECZEŃSTWO-- Czy: Jestem bezpieczny w tym fragmencie kodu?
Jak zabezpieczyć hasło? addslashes może chyba być nieprawidłowe skoro chciałbym udostępnić wszystkie znaki możliwe -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Zależy co chcesz z tymi danymi zrobić.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
Zależy co chcesz z tymi danymi zrobić. * Przechowywać w bazie (przy rejestracjj), * Przy logowaniu sprawdzać poprawność danych (czy użytkownik istnieje itd.), ps. email ucinany będzie po 350 znakach bo ponoć najdłuższy jaki był miał 345.., oraz hasło przycinane po 50 znaku; Ten post edytował ZaXaZ 20.04.2014, 12:08:02 -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) ![]() ![]() |
Jak już bindujesz dane w PDO to nie musisz się bawić w rzutowanie (jeżeli chodzi tu o zapytanie)
Ten post edytował Turson 20.04.2014, 12:15:45 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Najpierw sprawdzaj poprawność przesłanych przez użytkownika danych, dopiero później baw się w ich filtrowanie. O co chodzi (na przykładzie numeru GG)? Powiedzmy, że podałem swój numer GG jako 123e567890 - jest on nieprawidłowy (zawiera znak "e" oraz jest za długi). W tej chwili Twój kod go przepuści, a w bazie danych zostaną zapisane głupoty, a konkretnie wartość "123". Tak więc najpierw powinieneś sprawdzić czy dane są prawidłowe, tj. w tym przypadku sprawdzić czy masz w zmiennej tekst, składający się z samych cyfr, gdzie sam tekst jest niedłuższy niż 9 znaków:
A dopiero później zrobić ewentualne rzutowanie na INT. Analogicznie powinieneś postąpić przy nicku oraz emailu. 2. Akurat hasło spokojnie może mieć więcej niż 50 znaków. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
Jak już bindujesz dane w PDO to nie musisz się bawić w rzutowanie No fakt, zapomniałem o tym... chcialem samym query, zamiast np. prepare-execute lub tak jak pisales, jednak jak zrobię bindParam(':nick', $nick); itd to jestem bezpieczny? (głównie chodzi mi o sql injection chyba że jeszcze coś tu jest) -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Tak, jeżeli używasz bindowania nie musisz już obawiać się SQLInjection (przynajmniej w zakresie danych przesłanych tymi parametrami).
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 267 Pomógł: 6 Dołączył: 8.04.2013 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
MD5 to nie funkcja szyfrująca.
http://docs.php.net/manual/en/ref.password.php albo http://docs.php.net/manual/en/function.crypt.php albo http://www.openwall.com/phpass/ -------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
Jakąś funkcją szyfrującą np: $haslo = md5($haslo); być może źle pytanie zadałem ale odpowiedź już uzyskałem trochę wyżej nad tobą (co do bindowania - bo o to mi chodziło), a hasła będę miał "przerabiane/hashowane" przez hash_hmac bo md5 już dawno złamane, czyt. rainbow tables. -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zdajesz sobie sprawę że w przypadku hash_hmac gdy ktoś zdobędzie klucz to wszystkie twoje hasła są nic nie warte?
-------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 285 Pomógł: 18 Dołączył: 30.01.2014 Skąd: <?=$_GET['city']?> Ostrzeżenie: (0%) ![]() ![]() |
Zdajesz sobie sprawę że w przypadku hash_hmac gdy ktoś zdobędzie klucz to wszystkie twoje hasła są nic nie warte? tzn.?, mógłbyś oświecić mnie? - bo nie wiem o co chodzi. edit: $pass = hash_hmac('sha512', $_POST['pass'], 'sól'); będzie mniej bezpiecznie niż $pass = sha512($_POST['pass']); ![]() edit2: @down, w takim razie leci dla ciebie i dla viking "pomógł" za pomoc, thx. Ten post edytował ZaXaZ 20.04.2014, 15:34:30 -------------------- Jak poprawnie zadać pytanie || Generator #RRGGBB || Kurs: php, mysql <> html & css || Hosting || Validator: html, css || Narzędzia dla programistów |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Używanie algorytmów z rodziny SHA-1/-2 (np. SHA-512) już samo w sobie zbyt bezpieczne nie jest (zbyt szybko można je generować). Powinieneś skorzystać ze wspomnianego wcześniej crypt bądź password_hash i bezpiecznego algorytmu, np. Blowfish.
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 21.01.2013 Ostrzeżenie: (0%) ![]() ![]() |
Czy używanie crypt / password_hash & Blowfish nie jest najzwyczajniej w świecie mówiąc przerostem formy nad treścią? Samo hashowanie haseł ma przecież na celu ich ochronę tylko w przypadku dostania się do bazy intruza (czy to poprzez SQL Injection, czy konwencjonalnie - przez wejście do PMA). Czy zatem nie prościej byłoby po prostu zapisywać w formie zahashowanej hasło i sól prywatną dla każdego użytkownika? Nawet po zdobyciu jakimś cudownym trafem kopii danych z bazy przez potencjalnego intruza, jak długo trwałoby znalezienie metodą brute force właściwego hasła dla jednego użytkownika? To w sumie 16^128 kombinacji, bardzo, bardzo dużo. I oczywiście łamanie hasła odbywa się nie dla wszystkich użytkowników z bazy, ale dla pojedynczego.
To teraz pytanie: czy nie wystarczy po prostu wrzucić zwykłe sprawdzanie czy w ciągu ostatnich 15 minut nastąpiło co najmniej 5 prób nieudanego logowania i jeżeli tak, to odmawiać kolejnych logowań? Sam kiedyś stworzyłem taki system i korzystam z niego do dziś, bo jest w miarę bezpieczny. Owszem, nie użyłbym go do zabezpieczenia strony jakiegoś banku, ale na potrzeby zwykłych serwisów czy portali sprawdza się znakomicie. Czy jest zatem sens bawienia się w tego typu rzeczy? Jeżeli istnieje jakiś sensowny argument, to proszę go przytoczyć - nie chce się kłócić, i z wielką chęcią zmieniłbym nawyki, jeżeli obecne okazałyby się mało bezpieczne, ale musi istnieć konkretna przyczyna, a nie że podnosimy i tak już wysoko zawieszoną poprzeczkę. ![]() |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@ZaqU: W kontekście bezpieczeństwa zawsze będę reprezentować wręcz paranoiczną postawę.
![]() 1. password_hash z blowfishem wymaga takiej samej ilości pracy co sha512 z solą. W obu przypadkach... bardzo, bardzo mało. A w sumie powiedziałbym nawet, że jest to prostsze w obsłudze. 2. Co z tego, że jakiś hash daje 16^x kombinacji skoro i tak połowa użytkowników Twojego serwisu będzie miała hasła pokroju "qwerty", "internet123" czy "dupa.8"? Atakujący raczej na start rzuci jakiś atak słownikowy niż brute-force. I w przypadku takiego sha512 wygeneruje kilkaset czy kilka tysięcy kombinacji na sekundę, a przy blowfishu raczej kilka-kilkanaście. 3. Tutaj mówimy konkretnie o przypadku gdy intruz wpadł w posiadanie hasha naszego hasła, a nie o samym logowaniu, nie mniej jednak blokowanie możliwości zalogowania po x próbach jest słabym pomysłem - lepiej jest wymusisz jakąś CAPTCHA-e - sam niejednokrotnie zapominałem hasła do jakiś serwisów i potrzebowałem 10-20 prób na zalogowanie się. ![]() |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
I w przypadku takiego sha512 wygeneruje kilkaset czy kilka tysięcy kombinacji na sekundę... Dzisiaj z wykorzystaniem GPU to już nie tysiące, ale miliony. Ten post edytował redeemer 21.04.2014, 12:35:37 -------------------- |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Dzisiaj z wykorzystaniem GPU to już nie tysiące, ale miliony. Aż sprawdziłem kilkuletni, podrzędnej klasy laptop z którego właśnie piszę... 150 milionów MD5 na sekundę - SHA512 pewnie byłoby w okolicach 100M.
Ten post edytował Crozin 21.04.2014, 13:53:30 |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Aż sprawdziłem kilkuletni, podrzędnej klasy laptop z którego właśnie piszę... 150 milionów MD5 na sekundę - SHA512 pewnie byłoby w okolicach 100M. Z tymi 100M przy SHA512 to nie byłbym taki optymistyczny ![]() Dane z http://hashcat.net/oclhashcat/ -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.08.2025 - 03:40 |