Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zabezpieczenie Cookies po zalogowaniu, Manipulacja ID w cookies
Soulast
post 28.06.2010, 13:59:57
Post #1





Grupa: Zarejestrowani
Postów: 133
Pomógł: 6
Dołączył: 26.10.2009

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


Jest bardzo kiepski w zabezpieczeniach ale osoba która to napisała najwidoczniej jeszcze bardziej niż ja.

Obecnie skrypt który posiadam ustawia cookies po zalogowaniu w następujący sposób:

  1. //Set Cookies
  2. setcookie('tid', $user['id'], time() + (60 * $login['clength']));
  3. setcookie('user', $nazwa['user'], time() + (60 * $login['clength']));
  4. setcookie('pass', $haslo['pass'], time() + (60 * $login['clength']));


Gdzie Cookies w debugu wygląda następująco:

  1. Array ( [tid] => 1 [user] => nazwa [pass] => haslo [PHPSESSID] => idsesji )


Problem w tym że wystarczy abym zmienił swoje ID w cookie na jakiegoś innego usera ID i mam pełny dostęp do jego danych.

Podaje przykład obecnego działania zabezpieczenia if (isset($_COOKIE["user"]))

  1. if (isset($_COOKIE["user"])){
  2. $member=mysql_query("SELECT * FROM members WHERE id='{$_COOKIE['tid']}' AND password='{$_COOKIE['pass']}'");
  3. $member=mysql_fetch_array($member);
  4.  
  5. <div align='center'>
  6. .......Notka Po zalogowaniu ID usera 1 ...........
  7. </div>";
  8. }else{
  9. <div align='center' >
  10. ............Jakiś Login Form........
  11. </div>";}


Próbowałem jeszcze aby również sprawdzano hasło w sposób typu :

  1. if ((isset($_COOKIE["user"])) && (isset($_COOKIE["pass"])))


Niestety bez rezultatu...Mogę na stronce manipulować w cookies każdym ID usera i przez to mieszać im w profilach bez problemowo.
Ale niestety nie potrafię zabezpieczyć się przed tym aby nikt inny tego w tak prosty sposób robił.

Za wszelkie sugestie oraz pomoc z góry dziękuje.

Ten post edytował Soulast 28.06.2010, 14:02:25
Go to the top of the page
+Quote Post
wookieb
post 28.06.2010, 14:03:38
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




SESJA jest odpowiedzią na wszystko.


--------------------
Go to the top of the page
+Quote Post
Soulast
post 28.06.2010, 14:15:58
Post #3





Grupa: Zarejestrowani
Postów: 133
Pomógł: 6
Dołączył: 26.10.2009

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


Czyli?
Zastąpienie kompletnie cookies sesją?czy może się da jakoś sesje dodać do powyższego kodu?
Go to the top of the page
+Quote Post
wookieb
post 28.06.2010, 14:17:01
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Zastąpienie cookies sesją. I nie musisz w niej przechowywać loginu i hasła użytkownika a jedynie jego ID.


--------------------
Go to the top of the page
+Quote Post
Mikz
post 28.06.2010, 18:07:51
Post #5





Grupa: Zarejestrowani
Postów: 48
Pomógł: 3
Dołączył: 7.12.2007

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


  1. $member=mysql_query("SELECT * FROM members WHERE id='{$_COOKIE['tid']}' AND password='{$_COOKIE['pass']}'");


A teraz zrób sobie backupa bazy, otwórz cookies przeglądarki i ustaw sobie następującą wartość 'tid':

Cytat
'; UPDATE `members` SET `password` = 'nie umiem zabezpieczyć swoich skryptów' WHERE 1 = 1; --


A potem poczytaj do czego służy funkcja mysql_real_escape_string() i naucz się jej używać!
Go to the top of the page
+Quote Post
Soulast
post 29.06.2010, 11:00:42
Post #6





Grupa: Zarejestrowani
Postów: 133
Pomógł: 6
Dołączył: 26.10.2009

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


Nie wiem czemu ale sporo pomocników w przedszkolu łapie agresje i rzuca klockami winksmiley.jpg

Zanim hasło oraz tid zostało wrzucone do cookies przemieliłem to przez md5 oraz obecnie użyłem funkcji or die() co daje dobry rezultat jak i randomową wartość sid również zakodowaną.W skrócie mówiąc jeśli id, sid, pass, name które znajdują się w cookies nie będzie równe tym co są w cookies funkcja automatycznie wylogowuje takiego usera.

Również dodałem kod zabezpieczający przed atakami z pod url ale to już inna bajka.

Anyway sprawę rozwiązałem więc proszę o zamknięcie posta czy tam jego usunięcie.

Ten post edytował Soulast 29.06.2010, 11:09:28
Go to the top of the page
+Quote Post
d.stp
post 26.09.2016, 10:21:07
Post #7





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


Witam, zrobiłem logowanie na ciachach i mam identyczny problem jak w tym temacie dlatego postanowiłem tutaj odgrzać...

Jak to zabezpieczyć? chce mieć "zapamiętaj mnie" przy logowaniu, gdzie wtedy w cookiesa wrzucam czas ciacha na 24h i sprawdzam sobie np. w sekcji dla zalogowanych:

if (isset($cookie)) { // dla zalogowanego } else { // niezalogowany }

czy takie coś jest ok? w ciachu trzymam tylko login usera i wartość zalogowany_user 1 lub 0 jeśli niezalogowany.

Ten post edytował d.stp 26.09.2016, 10:21:20
Go to the top of the page
+Quote Post
nospor
post 26.09.2016, 10:23:49
Post #8





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




Cytat
w ciachu trzymam tylko login usera i wartość zalogowany_user 1 lub 0 jeśli niezalogowany.

No przeciez kazdy moze bez problemu ustawic sobie takie ciacho i oh ech bedzie widzial tresc dla zalogowanego usera.... Czemu nie zrobisz tego normalnie na sesjach tylko kombinujesz bez sensu?


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

"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
d.stp
post 26.09.2016, 10:49:52
Post #9





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


Bo chce mieć sesje na jeden dzień, a nie że co zamknięcie przeglądarki musze się znowu logować...
Go to the top of the page
+Quote Post
nospor
post 26.09.2016, 10:52:22
Post #10





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




No to zamiast trzymac login usera, trzymaj jakis tajny ciag wygenerowany dla danego usera i z jego IP i z czasem i zapisuj to do bazy oraz ustawiaj w ciachu. Gdy koles wejdzie z takim ciachem to sprawdzasz jaki user ma w bazie taki tajny ciag. Bedzie to o niebo bezpieczniejsze od tego co masz teraz

ps: cos takiego
$tajnyCiag = md5($userId . $userIp . $userBrowser . time());

gdzie $userIp i $userBrowser wyciagniesz z $_SERVER

ps2: zeby bylo jeszcze bezpieczniej to ustaw waznosc dla tego na 1 dzien. W bazie rzecz jasna a nie w ciachu

ps3: mozesz tez trzymac info z jakiego IP zostal utworzony ten tajny ciag i sprawdzac rowniez czy IP osoby z tym ciachem zgadza sie z IP zapisanym w bazie. Wowczas nawet jak haker wykranie to ciacho, to nie bedzie sie zgadzalo IP


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

"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
d.stp
post 26.09.2016, 10:59:52
Post #11





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


Dobra czyli przy logowaniu ustawiam sobie:

$tajny_ciag = md5('n'.time().'o'.time().'s'.time().'p'.time().'o'.time().'r');
setcookie('tajny_ciag ', $tajny_ciag, time()+3600*24);
// update ciacho where user = user_login

i gra gitara. Teraz gdzieś w indexie wrzucam:

  1. if (isset($cookie)) {
  2. // pobieram cookie z bazy
  3. // sprawdzam czy ciacho sie zgadza te z bazy == te w coookie
  4. // jesli jest ok wyswietlam sekcje dla zalogowanego
  5. // jesli nie jest ok wyrzucam go na strone logowania
  6. }


jak w bazie mam ustawić ważność? ohmy.gif

Ten post edytował d.stp 26.09.2016, 11:00:46
Go to the top of the page
+Quote Post
redeemer
post 26.09.2016, 11:01:28
Post #12





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Taki mechanizm ma swoją nazwę/nazwy: "Persistent login", "Remember me"

https://paragonie.com/blog/2015/04/secure-a...erm-persistence

Ten post edytował redeemer 26.09.2016, 11:02:46


--------------------
Go to the top of the page
+Quote Post
nospor
post 26.09.2016, 11:02:56
Post #13





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




Cytat
jak w bazie mam ustawić ważność?

Dodaj poprostu kolejne pole z data utworzenia tego tajnego ciagu i sprawdzaj czy nie jest starsze niz jeden dzien.
Tak samo utworz dodatkowe pole IP z ktorego utworzono ten tajny ciag.


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

"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
d.stp
post 26.09.2016, 11:05:32
Post #14





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


OK, czyli jak się zaloguje ponownie już na tym tajnym_ciagu ALBO odświeże strone jak jestem zalogowany to robie jeszcze update waznosc_tajnego_ciagu = nowa_waznosc. O to chodzi?

Tajny ciąg to moge zrobić tak jak hasła? solą itp??
Go to the top of the page
+Quote Post
nospor
post 26.09.2016, 11:08:31
Post #15





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




Tak i tak.

A jako sol to rownie dobrze beda sluzyc dane user jak IP, browser czy time co ci podalem.


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

"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
d.stp
post 26.09.2016, 11:13:37
Post #16





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

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


No ale prawda jest taka że jakbym dał dał 12381723812371237 stringa to i tak to nie jest bezpieczne gdyż ponieważ uważam iż, że skoro ktoś przejmie takie ciacho to i tak sie zaloguje, a wprowadzanie IP tylko uprzykrzy życie bo wiele osób ma zmienne IP więc z tego będą problemy wink.gif
Go to the top of the page
+Quote Post
!*!
post 26.09.2016, 11:40:23
Post #17





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


@d.stp nikt dziś nie buduje mechanizmów sesji opartych o IP, @nospor najwyraźniej ma sentyment do lat 90tych wink.gif skorzystaj z jakichś gotowych skryptów sesji lub klas frameworków. Przechwycenie takiego ciacha jest... kurde, musiałbyś mieć spore braki w filtrowaniu zmiennych przesyłanych od użytkownika, żeby wstrzyknąć kod który odczyta taki klucz należący do innego użytkownika


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
nospor
post 26.09.2016, 13:00:25
Post #18





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




Cytat
@nospor najwyraźniej ma sentyment do lat 90tych

tongue.gif

Starzy ludzie maja swoje przyzwyczajenia wink.gif


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

"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
Pyton_000
post 26.09.2016, 13:00:48
Post #19





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Stary człowiek i może biggrin.gif
Go to the top of the page
+Quote Post
nospor
post 26.09.2016, 13:03:46
Post #20





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




I to nie jest mechanizm sesji a mechanizm "Remember me " wink.gif

@Pyton Stary czlowiek tez moze wink.gif

Cytat
wprowadzanie IP tylko uprzykrzy życie bo wiele osób ma zmienne IP więc z tego będą problem
to zamiast IP wprowadz BROWSER. zawsze to cos

Cytat
kurde, musiałbyś mieć spore braki w filtrowaniu zmiennych przesyłanych od użytkownika, żeby wstrzyknąć kod który odczyta taki klucz należący do innego użytkownika
Tja.... Nasz bohater w ciachu na poczatku trzymal login usera wiec wiesz wink.gif


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

"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

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: 5.07.2025 - 12:29