• 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.

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
+2 głosów
165 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 Gaduła (4,620 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,420 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 Gaduła (4,620 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ź 156 wizyt
pytanie zadane 15 października 2016 w PHP przez wanderer Gaduła (3,710 p.)
+1 głos
1 odpowiedź 147 wizyt
pytanie zadane 6 marca 2021 w PHP przez Mateusz Wydra Nowicjusz (240 p.)
0 głosów
2 odpowiedzi 234 wizyt

89,745 zapytań

138,348 odpowiedzi

309,377 komentarzy

59,659 pasjonatów

Advent of Code 2022

Top 15 użytkowników

  1. 747p. - Argeento
  2. 696p. - Mikbac
  3. 693p. - Michal Drewniak
  4. 692p. - rucin93
  5. 688p. - Łukasz Eckert
  6. 679p. - ssynowiec
  7. 678p. - TheLukaszNs
  8. 654p. - JMazurkiewicz
  9. 645p. - Hubert Chęciński
  10. 645p. - Jarosław Roszyk
  11. 640p. - adrian17
  12. 592p. - nidomika
  13. 506p. - tokox
  14. 501p. - Rafał Budzis
  15. 498p. - overcq
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...