Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP][php, jquery], bezpieczeństwo logowania, luźne pytanie
Forum PHP.pl > Forum > Przedszkole
hao
Cześć.
Mam pytanie, odnośnie przechowywania i przekazywania zmiennych reprezentujących ID użytkownika, zakładając, że mamy jakiś panel admina i kilku użytkowników.
Otóż, na stronie mam kilka skryptów jquery, które potrzebują przekazać ID użytkownika. Ale jeśli to zrobię, to jego ID będzie widoczny dla każdego (np. w podglądzie źródła).
Wykombinowałem sobie tak, że każdy user ma swój unikalny TOKEN (jakiś hash), który generuje się za każdym logowaniem nowy.
I w javascript przekazuję ten właśnie token, a nie ID użytkownika.
Dopiero później, kiedy jquery "realizuje" jakoś inny skrypt php, korzystając z tego TOKENA, pobieram sobie sobie ID użytkownika z bazy danych i działam.

Dlaczego takie coś? Ponieważ zmienne SESJI nie działają w plikach php wywołanych przez jQuery i GET.
Otóż:
Pliki, które sobie może użytkownik wgrać na stronę, mogłyby mieć w nazwie (lub katalogu) numer ID, np. 1_obrazek.jpg (plik obrazek, którego właścicielem jest user ID:1). Jak sobie ktoś skopiuje URL obrazka i zastąpi numerek jakimś innym, to może podglądnąć obrazki inych userów. A niech spróbuje zgadnąć TOKEN! Marna szansa.

To się też tyczy wykonywania jakichkolwiek operacji, gdzie ID usera jest jawny w kodzie. Ktoś sobie odpali ten sam formularz, ale w polu (załóżmy) <input name="user_ID"> wpisze sobie inny ID i będzie klęska smile.gif

I teraz moje pytanko:
- czy to co wydumałem z tym tokenem jest bezpieczne? Chodzi mi właśnie o przekazywanie unikalnych zmiennych przez javascript (czyli jawne).
Jeśli nie jest, to w jaki sposób - bezpiecznie - przekazać ID użytkownika do jakiegoś skryptu ładowanego przez GET?

  1. var Token = '10b3d9cf5cd3439672c71855bca6e8e176fab687a0981ec10c683e527f7f86141';
  2. var variables = {"Adres":JakasZmienna, "token":Token};
  3. $.get( 'save.php', variables, function() { ...


A potem:

  1. $query = "SELECT `id` FROM users where `token`='".$_GET['token']."' LIMIT 1";
  2. $result = $mysqli->query($query) or die($mysqli->error.__LINE__);
  3. $row = $result->fetch_assoc();
  4.  
  5. $UserID = $row['id'];
viking
Podstawowe pytanie jakie musisz sobie zadać to jakim cudem użytkownik x może pobierać z bazy rekordy należące do innych użytkowników.
hao
Nie wiem.
- wydaje mi się, że nie może. Wszystkie stringi są sprawdzane (sanitize) przed użyciem w mysql. Session['id'] jest przecież po stronie serwera.
- raczej zastanawiam się, czy znając np. domyślną ścieżkę z plikami użytkowników, ktoś znając adres swojego pliki, może np. spróbować postawić inną losową liczbę (np.: www.adres.pl/pliki/uzytkownik_1_dokument.pdf ===> www.adres.pl/pliki/uzytkownik_25_dokument.pdf) - oczywiście to teoretyzowanie. Mając pliki w strukturze [nazwa pliku: hash('prawdziwa nazwa pliku'.$_SESSION['id']) - to chyba raczej będę bezpieczny?
nospor
Cytat
Dlaczego takie coś? Ponieważ zmienne SESJI nie działają w plikach php wywołanych przez jQuery i GET.
No patrz, od late tego uzywam i nie zauwazylem ze nie dziala.... Ty, dobrze ze nas oswieciles.... wink.gif

A juz powaznie: niby czemu nie dziala? Sesje guzik obchodzi czy to ajax czy nie. Czy to get czy post.
hao
Bardzo pomocna odpowiedź!
Dotarło właśnie do mnie, że nie wrzuciłem session_start do plików ładowanych przez GET przez jQuery.
To właściwie zamyka cały ten temat, bo nie muszę już kombinować z tokenami itp...
Dzięki smile.gif
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.