Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP][php, jquery], bezpieczeństwo logowania, luźne pytanie, parę pytań o bezpieczeństwo przekazywania zmiennych typu "user_id&
hao
post
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 12.02.2004

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


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'];


Ten post edytował hao 27.06.2017, 23:55:03
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


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.


--------------------
Go to the top of the page
+Quote Post
hao
post
Post #3





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 12.02.2004

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


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?
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




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.


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

"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
hao
post
Post #5





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 12.02.2004

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


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
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 Aktualny czas: 22.08.2025 - 01:05