Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Bardzo bezpieczne logowanie
Forum PHP.pl > Forum > PHP
Mayka
Witam

Zabieram się do napisania skryptu logowania, ale bardzo zależy mi na bezpieczeństwie przechowywanych i przesyłanych danych. I tu mam kilka pytań odnośnie tego:

1. Jak przechowywać informację o zalogowaniu ? Sesja ? Co z podrobieniem czy 'wykradzeniem' sesji ? Jakiś specjalny identyfikator sesji ? Generowany na podstawie "nr. buta" użytkownika ?
2. wykorzystywać jakiś algorytm do przechowywania tych haseł ? Md5 ? sha1 ? może mcrypt? ew jakieś inne bezpieczniejsze ?
3. Gdzie przechowywać ? Plik,(i/lub) ? Mysql ?
4. Jak wygląda sprawa z SSL ? Jakieś specjalne wymagania ? od strony php oczywiście.
4,5 Może jakiś framework..?
5. Na co zwrócić uwage przy pisaniu takiego skryptu ?
Będzie wykorzystany na stronie na której planowany jest dosyć spory ruch i przechowywane bardzo poufne informacje wiec prawdopodobieństwo ataków na takie logowanie podejrzewam że będzie sporo..
Ktoś ma ew jakieś inne pomysły jak takie coś zrealizować ?

edit:
Znalazłem w międzyczasie taka funkcje:
Kod
function mrp() {
  $salt = "iy987234h23j4iusfdh3u24";
  srand((double)microtime()*1000000);
      $i = 0;
      while ($i <= 7) {
            $num = rand() % 33;
            $tmp = substr($salt, $num, 1);
            $pass = $pass . $tmp;
            $i++;
      }
      return $pass;
}
$random_pass = mrp();
$db_pass = md5($random_pass);

Co myślicie na ten temat ?
erix
A czytałeś przyklejone wątki?
Mayka
Znaczy masz na mysli te tematy Temat: Bezpieczenstwo skryptow PHP i Temat: SQL Injection Insertion

To tak czytałem, co prawda temat pierwszy nie przebiłem sie jeszcze do konca.. ale jak narazie nie bardzo znalazłem informacje na pytania które zadałem..
greycoffey
Cytat(Mayka @ 12.03.2011, 16:26:13 ) *
Witam

Zabieram się do napisania skryptu logowania, ale bardzo zależy mi na bezpieczeństwie przechowywanych i przesyłanych danych. I tu mam kilka pytań odnośnie tego:

1. Jak przechowywać informację o zalogowaniu ? Sesja ? Co z podrobieniem czy 'wykradzeniem' sesji ? Jakiś specjalny identyfikator sesji ? Generowany na podstawie "nr. buta" użytkownika ?
2. wykorzystywać jakiś algorytm do przechowywania tych haseł ? Md5 ? sha1 ? może mcrypt? ew jakieś inne bezpieczniejsze ?
3. Gdzie przechowywać ? Plik,(i/lub) ? Mysql ?
4. Jak wygląda sprawa z SSL ? Jakieś specjalne wymagania ? od strony php oczywiście.
4,5 Może jakiś framework..?
5. Na co zwrócić uwage przy pisaniu takiego skryptu ?
Będzie wykorzystany na stronie na której planowany jest dosyć spory ruch i przechowywane bardzo poufne informacje wiec prawdopodobieństwo ataków na takie logowanie podejrzewam że będzie sporo..
Ktoś ma ew jakieś inne pomysły jak takie coś zrealizować ?

edit:
Znalazłem w międzyczasie taka funkcje:
Kod
function mrp() {
  $salt = "iy987234h23j4iusfdh3u24";
  srand((double)microtime()*1000000);
      $i = 0;
      while ($i <= 7) {
            $num = rand() % 33;
            $tmp = substr($salt, $num, 1);
            $pass = $pass . $tmp;
            $i++;
      }
      return $pass;
}
$random_pass = mrp();
$db_pass = md5($random_pass);

Co myślicie na ten temat ?

1. Używasz mechanizmu sesji dostarczanego lub implementujes własny. Ja używam własnego, z identyfikatorem uniqid().$ipusera hashowane tigerem 192biotwym. Ciastka SESSID wysyłaj z opcją httpOnly.
2. Md5 i sha1 nie są już zalecane, do haseł używam wolnego algorytmu whirlpool, przez co w wypadku dostania się bazy w złe ręce, trzeba wykonać więcej obliczeń. Do tego salt oczywiście.
3. Sesje - tabela typu memory. Dane użytkownika - nie ma znaczenia.
4. SSL to sprawa między klientem a serwerem przecież.
5. Filtrowanie wszystkich zmiennych przychodzących, tokeny przy mniej ważnych akcjach, wpisywanie hasła przy ważniejszych, usuwanie sesji po 10min nieaktywności. Generalnie nie ufaj niczemu od użytkownika.

Ta funkcja generuje losowe hasło, co mamy tu oceniać? Po co tu ten srand? Obciąża tylko serwer.


Nie wierzę, że pisanie duzego serwisu zostało powierzone komuś, kto się pyta o takie rzeczy. Mcrypt to nie jest algorytm mieszający.. Jak chcesz, aby odpowiedzi były profesjonalne, wystarczy napisać, że chcesz, aby system był bezpieczny. Już widzę nadchodzące posty "Witam. Piszę w PHP system zabezpieczeń do przycisku 'RED BUTTON' prezydenta Obamy. Pomoże ktoś?".
Mayka
Cytat(greycoffey @ 13.03.2011, 19:45:27 ) *
Nie wierzę, że pisanie duzego serwisu zostało powierzone komuś, kto się pyta o takie rzeczy. Mcrypt to nie jest algorytm mieszający.. Jak chcesz, aby odpowiedzi były profesjonalne, wystarczy napisać, że chcesz, aby system był bezpieczny. Już widzę nadchodzące posty "Witam. Piszę w PHP system zabezpieczeń do przycisku 'RED BUTTON' prezydenta Obamy. Pomoże ktoś?".


Ale ja nie wiem czemu wnikasz dla kogo i po co to jest pisane ? Mam potrzębę napisania takiego kodu z logowaniem i już, napisałem że chodzi mi o bezpieczeństwo(w pierwszym zdaniu) wiec nie wiem skąd te wątpliwości że licze na profesjonalną odpowiedz ?
P.s. Nie pisze dla Obamy...

@AndyPSV -> Przewaliłem strony z wyszukiwarki ale niesety sporo jest odpowiedzi takich jak przed chwilą 'greycooffey' -
Mnie nie chodzi o normalne procedury uwierzytelniania tylko chciałbym napisać coś co będzie wmiare szczelne i pytam was jako doświadczonych php'owców na co zwrócić uwage ? Czy to jest takie dziwne ? Jak bym chciał napisać cos w stylu:
Kod
if (isset($_SESSION['nazwa_uzytkownika']) && ($_SESSION['nazwa_uzytkownika']=='nick') )
{ to cos tam }


To bym to napisał i nie pytał was o zdanie
cudny
Cytat(Mayka @ 14.03.2011, 07:46:57 ) *
Ale ja nie wiem czemu wnikasz dla kogo i po co to jest pisane ? Mam potrzębę napisania takiego kodu z logowaniem i już, napisałem że chodzi mi o bezpieczeństwo(w pierwszym zdaniu) wiec nie wiem skąd te wątpliwości że licze na profesjonalną odpowiedz ?
P.s. Nie pisze dla Obamy...

@AndyPSV -> Przewaliłem strony z wyszukiwarki ale niesety sporo jest odpowiedzi takich jak przed chwilą 'greycooffey' -
Mnie nie chodzi o normalne procedury uwierzytelniania tylko chciałbym napisać coś co będzie wmiare szczelne i pytam was jako doświadczonych php'owców na co zwrócić uwage ? Czy to jest takie dziwne ? Jak bym chciał napisać cos w stylu:
Kod
if (isset($_SESSION['nazwa_uzytkownika']) && ($_SESSION['nazwa_uzytkownika']=='nick') )
{ to cos tam }


To bym to napisał i nie pytał was o zdanie



Ja to Cie nie rozumiem, po co na siłę ulepszać świat !
Chcesz mieć bezpieczne logowanie ? Zapisuj userów wraz z ich IP do bazy, a relacje z bazą do sesji i wtedy masz w sesji id zalogowanego usera, a jeśli sesja się myli to i tak jest sprawdzane w bazie czy faktycznie zostało to uwierzytelnione - nic więcej nie wymodzisz. Ustaw tylko na początku pliku odświeżenie sesji żeby nikt Ci jej nie podłożył w nagłówku.
Pisałem wiele aplikacji, w wielu zespołach i każdy zawsze używał dobrych sprawdzonych sposobów, a jeśli chcesz mieć super sposób to fajnie jest rozwiązane zend acl
Naucz się Zenda i korzystaj z acl - wybierasz kontrollery które dany user może odczytywać, a których nie z bazy i tak dalej...
Ja korzystam już tylko z Zenda bo nie muszę się właśnie takimi pierdołami przejnować smile.gif
Fifi209
Cytat(cudny @ 14.03.2011, 07:53:21 ) *
Naucz się Zenda i korzystaj z acl - wybierasz kontrollery które dany user może odczytywać, a których nie z bazy i tak dalej...

Kontrolery trzymasz w bazie? haha.gif
cudny
Cytat(fifi209 @ 14.03.2011, 08:29:54 ) *
Kontrolery trzymasz w bazie? haha.gif


Nie kontrolery tylko wybór do jakiego kontrolera i akcji user ma dostep.
quality
Popieram @cudny. Po co wymyslac kolo na nowo. Od logowania i uwierzytelniania sa odpowiednie systemy, ktore doskonale sie sprawdzaja. Zend w tym przypadku jest bardzo dobrym pomyslem, zapewne i uwierzytelnianie z Symfony jak i innych frameworkow smile.gif
webdice
Cytat(Mayka @ 12.03.2011, 16:26:13 ) *
(...) 5. Na co zwrócić uwage przy pisaniu takiego skryptu ? (...)


Może nie tyle co przy pisaniu, ale przy testowaniu na serwerze produkcyjnym. Szczególną uwagę zwróciłbym na konfiguracje serwera. Często spotykałem się z sytuacją gdzie katalog /tmp można było przeglądać jak pliku na dysku lokalnym. Dodatkowo ważną sprawą są uprawnienia. Sytuacja również często spotykana gdzie właścicielem lub/oraz grupą dla plików/katalogów wszystkich klientów jest ten sam użytkownik systemowy. Jest jeszcze kilka często spotykanych luk w konfiguracjach, ale po więcej informacji odsyłam do artykułów w sieci.

Tak więc przed korzystaniem z hostingów współdzielonych nawet przy najlepiej zabezpieczonym systemie autoryzacji możesz mieć przykre niespodzianki.
cudny
Cytat(webdice @ 14.03.2011, 12:14:28 ) *
Może nie tyle co przy pisaniu, ale przy testowaniu na serwerze produkcyjnym. Szczególną uwagę zwróciłbym na konfiguracje serwera. Często spotykałem się z sytuacją gdzie katalog /tmp można było przeglądać jak pliku na dysku lokalnym. Dodatkowo ważną sprawą są uprawnienia. Sytuacja również często spotykana gdzie właścicielem lub/oraz grupą dla plików/katalogów wszystkich klientów jest ten sam użytkownik systemowy. Jest jeszcze kilka często spotykanych luk w konfiguracjach, ale po więcej informacji odsyłam do artykułów w sieci.

Tak więc przed korzystaniem z hostingów współdzielonych nawet przy najlepiej zabezpieczonym systemie autoryzacji możesz mieć przykre niespodzianki.


Co racja to racja - polecam także w .htaccess wszędzie gdzie nie ma publicznego dostępu (includowane pliki, xml, itp.) dać klauzurę deny from all :]
Mayka
O i o to mi własnie chodziło;) dzieki Panowie, w takim razie zabieram sie za ogarniecie ZEND'a.
A czy jest jakieś mądre zródło nie licząc oczywiście http://zend-framework.pl/manual/ ?
Żeby nie 'upaść' od nawału wiedzy, żebym nie zrezygnował zanim zaczne;)
cudny
Zend fajnie jest opisywany na tym blogu http://www.heavymind.net/zend-framework-tutorial/
Jeśli chodzi o to czy polegniesz na początku to gwarantuję, że jeśli nie polegniesz w pierwszych 3 tygodniach to przetrwasz biggrin.gif
Będziesz miał problem z .htaccess, bootstrapem i MVC smile.gif ale pamiętaj że to tylko początki, które jak zgłębisz to będzie już tylko lepiej i łatwiej...
Acha - jeśli nie pisałeś nic obiektowo to najpierw liźnij OOP bo nie dasz rady ;(

greycoffey
Cytat(Mayka @ 14.03.2011, 07:46:57 ) *
@AndyPSV -> Przewaliłem strony z wyszukiwarki ale niesety sporo jest odpowiedzi takich jak przed chwilą 'greycoffey' -


Nie rozumiem. Napisałem Ci to, o co właśnie pytałeś, a przez nutkę uszczypliwości olałeś moją odpowiedź. Dostałeś za to odpowiedź jakiego komponentu użyć (i napisałeś, że taką odpowiedź chciałeś uzyskać) - a przecież chciałeś się wgłębić w tajniki pisania bezpiecznego systemu autoryzacji.
Napisz co Ci się nie podobało w mojej wypowiedzi pod względem merytorycznym..
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.