Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Cookie -> zmiana wartosci przez usera
Forum PHP.pl > Forum > PHP
entine
Pytam. Mam takie nurtujące mnie pytanie.
Mianowicie jak sprawdzacie, czy użytkownik strony nie zmienił sobie wartości w ciasteczku ($_COOKIE).

Ja kiedyś robiłem to w bardzo prosty, lecz mało profesjonalny sposób. Przykład z logowania:
Użytkownik loguje się, zapisuje mu się ciasteczko login i id oraz md5(base_64decode(pass)). Później za każdym przeładowaniem strony skrypt sprawdzał, czy są takie dane w bazie danych, mniej więcej tak:

  1. SELECT * FROM Logowanie WHERE login=$login AND haslo=$haslo AND id=$id


Jest to niestety sposób niedopuszczalny, a to dlatego, że jest niewydajny, szczególnie dla serwisów z duża ilością wejść dziennych.

Bardzo jestem ciekawy jak wy to rozwiązujecie, a może jest jakaś inna możliwość w php, o której nie wiem ?

Pozdrawiam winksmiley.jpg
GrayHat
dodawaj do cookie checksum np:
  1. <?php
  2. $_COOKIE['login'] = 'zenek';
  3. $_COOKIE['login_time'] = time();
  4. $_COOKIE['checksum'] = md5($_COOKIE['login'].time());
  5. ?>

i potem sprawdzasz:
  1. <?php
  2. if ($_COOKIE['checksum'] == md5($_COOKIE['login'].$_COOKIE['login_time'])){
  3. // dane autentyczne
  4. } else {
  5. // ktos przyhakierzyl ;P
  6. }
  7. ?>
entine
@GrayHat:

Jesteś genialny ! W życiu nie wpadłbym na coś tak prostego i fajnego. Wprawdzie można shakować nadal, ale prawdopodobieństwo jest dużo mniejsze niż w przypadku nie zabezpieczenia. Dzięki !
GrayHat
Dziekuje za slowa uznania.
Mozesz jeszcze obnizyc prawdopodobienstwo zlamania checksumy trzymajac w configu jakas wartosc np liczbowa ktora jest generowana przy instalacji systemu a potem dodawana do checsum:

  1. <?php
  2. $config['checksumAddCode'] = 123456789;
  3. ?>


i nasz kod cookie:

  1. <?php
  2. $_COOKIE['login'] = 'zenek';
  3. $_COOKIE['login_time'] = time();
  4. $_COOKIE['checksum'] = md5($_COOKIE['login'].time().$config['checksumAddCode']);
  5. ?>



  1. <?php
  2. if ($_COOKIE['checksum'] == md5($_COOKIE['login'].$_COOKIE['login_time'].$config['checksumAddCode'])){
  3. // dane autentyczne
  4. } else {
  5. // ktos przyhakierzyl ;P
  6. }
  7. ?>


teraz nawet jak "hakier" bedzie wiedzial o kodowaniu hasla to i tak nie zgadnie wartosci z configu winksmiley.jpg

pozdrawiam winksmiley.jpg
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.