• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Użytkownicy mysql ograniczenia dostępu sesionID nieuprawniony dostęp do bazy.

Object Storage Arubacloud
+2 głosów
333 wizyt
pytanie zadane 27 września 2021 w PHP przez przemobt Początkujący (270 p.)
Czy jest możliwość ograniczyć dostęp użytkownikom baz danych do poszczególnych baz danych?

Moja aplikacja jest w PHP, problemem jest sposób w jaki jest używana i zaimplementowana w mojej organizacji.

Mianowicie:

adres/aplikacja_1

adres/aplikacja_2

adres/aplikacja_2

w/w aplikacje działają w ramach jednej usługi serwera, są to te same pliki skopiowane do innych folderów, różnią się jedynie plikami konfiguracyjnymi w których zdefiniowane są połączenia do DB.

Na serwerze bazodanowym posiadam

baza1 / dbuser1 / password1

baza2 / dbuser2 / password2

baza3 / dbuser3 / password3

w/w bazy są strukturalnie takie same różnią się wpisami

dodatkowo utworzone zostały 3 konta użytkowników DB o minimalnych przywilejach.

PROBLEM:

Wchodzę na adres/aplikacja_1  już na samym otwarciu aplikacji  nawiązuje połączenie do baza1 z użytkownikiem dbuser1 podaję login i hasło bo aplikacja ma możliwość pracy bez zalogowania oraz po zalogowaniu. Jestem zalogowany użytkownikiem który jest tylko w baza1@users i wszystko ładnie działa ale... nie wylogowuje się i przechodzę pod adres/aplikacja_2 i jestem w pełni w bazie i aplikacji 2 pomimo, że w a bazie2 dla aplikacja_2 nie ma użytkownika i hasła i tej samej nazwie co w bazie1.

Na pewno połączenie z bazą1 / dbuser1 nie jest zamknięte, wygląda to tak, że wystarczy zalogować się do jednej z aplikacji i masz dostęp do wszystkich. ID sesji nie zmienia się, próbowałem regenerować ID sesji ale nie pomogło, próbowałem określić dostępy użytkownikom baz danych jak poniżej ale też bez efektów.

GRANT SELECT, INSERT, UPDATE, DROP ON `baza1`.* TO 'user1'@'%';

GRANT SELECT, INSERT, UPDATE, DROP ON `baza2`.* TO 'user2'@'%';

GRANT SELECT, INSERT, UPDATE, DROP ON `baza3`.* TO 'user3'@'%';

Nie próbowałem stawiać każdej z aplikacji na osobnych serwerach wirtualnych, nie próbowałem dodatkowo odpytywać bazy danych czy ów zalogowany user istnieje w bazie (poza momentem uwierzytelniania).

Póki co to nie mam pomysłów na rozwiązanie tego problemu. Proszę o porady.

5 odpowiedzi

+2 głosów
odpowiedź 28 września 2021 przez neo1020 Dyskutant (8,430 p.)
wybrane 15 października 2021 przez przemobt
 
Najlepsza

zmień dla każdej apki i sprawdź

apka1

if(!isset($_SESSION['zalogowany-app1']))

dla apki 2

if(!isset($_SESSION['zalogowany-app2']))

itd.

wartości dla zmiennych mogą być takie same, ale same nazwy zmiennych spróbuj zmienić na różne w zależności od aplikacji

Jeżeli to 2 różne aplikacje i 2 różne bazy danych , nie możesz mieć 2 takich samych zmiennych, bo jeżeli w aplikacji 1 masz

if(!isset($_SESSION['zalogowany']))

i w aplikacji 2 sprawdzasz tak samo

if(!isset($_SESSION['zalogowany']))

to przechodząc z pierwszej na drugą, jesteś zalogowany z pierwszej, a przechodząc z drugiej na pierwszą będziesz zalogowany użytkownikiem z bazy 2, sprawdzałeś na odwrót ? zaloguj się w apce 2 i przejdź do apki 1 czy efekt będzie taki sam 

+3 głosów
odpowiedź 27 września 2021 przez efiku Szeryf (75,160 p.)
edycja 27 września 2021 przez efiku

Nie piszesz nic o tym w jaki sposób realizujesz połączenia w skrypcie.
Ciężko z tego coś wywróżyć.

Realizując połączenie w PDO nie powinieneś mieć problemu o ile zamknąłeś połączenie lub nie ustawiłeś czasem ATTR_PERSISTENT

https://www.php.net/manual/en/pdo.connections.php

Zweryfikuj w swojej aplikacji przykład #3.

Najlepiej byłoby odpalić ten projekt w vmce na np. Vboxie i w PHPStormie spiąć połączenia oraz xdebuga.

Najprawdopodobniej:
Może to też być wina sesji,  może warto rozwiązać jakiś model spinający sesje i ciasteczka?
Ponieważ to Twoje location się zmienia, a nie domena, hash sesji powinien utrzymywać się ten sam.

 

+2 głosów
odpowiedź 27 września 2021 przez neo1020 Dyskutant (8,430 p.)

Czy w aplikacji sprawdzasz czy jesteś zalogowany ? i masz dostęp do zasobów ?

np.

if(isset($_SESSION['zalogowany-app1'])){
include 'admin.php';
}else{
echo brak dostępu;
}

Jeżeli tak to czy podczas sprawdzania zmienna 

$_SESSION['zalogowany-app1'] różni się dla każdej z aplikacji
np:

$_SESSION['zalogowany-app1']

$_SESSION['zalogowany-app2']

$_SESSION['zalogowany-app3']

Zakładam że dane do logowania do bazy masz na 100% różne w zależności od aplikacji

+1 głos
odpowiedź 15 października 2021 przez przemobt Początkujący (270 p.)
Wielkie dzięki z podpowiedź problem rozwiązany poprzez zmianę nazwy zmiennej sesyjnej zalogowany_app_n dla każdej z apek.
0 głosów
odpowiedź 28 września 2021 przez przemobt Początkujący (270 p.)

@neo1020

Tak sprawdzam zalogowanie w bardzo podobny sposób ale zmienne nie różnią się dla aplikacji. W każdej są to te same boolowskie wartości.

session_start();
require_once ("_conf_/config.php");

if(!isset($_SESSION['zalogowany']))
	{
		header('Location: yep.php');
		exit();
	}

Na 100% użytkownicy nie dublują się pomiędzy bazami. 

@efiku

Połączenie wykonuję w najprostszy możliwy sposób.

$link = new mysqli($db_addr, $db_user, $db_pass, $db_name);

W kwestii przypomnienia loguje się do apki pierwszej loginem z apki pierwszej i wykonują się zapytania na bazie1, otwieram nowa kartę wpisuje adres apki2 i jestem od razu zalogowany użytkownikiem z bazy1 którego w bazie2 nie ma i wykonują się zapytania na bazie2. ID sesji w obu przypadkach jest takie samo.

Potestuję, posprawdzam zarządzanie sesją jeszcze i dam znać.

Podobne pytania

0 głosów
1 odpowiedź 208 wizyt
pytanie zadane 15 października 2016 w PHP przez wanderer Gaduła (3,710 p.)
+1 głos
1 odpowiedź 302 wizyt
pytanie zadane 6 marca 2021 w PHP przez Mateusz Wydra Nowicjusz (240 p.)
0 głosów
2 odpowiedzi 731 wizyt

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...