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

Hosting forpsi easy 1 pln
+2 głosów
245 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 Mądrala (6,930 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 Mądrala (6,930 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ź 192 wizyt
pytanie zadane 15 października 2016 w PHP przez wanderer Gaduła (3,710 p.)
+1 głos
1 odpowiedź 258 wizyt
pytanie zadane 6 marca 2021 w PHP przez Mateusz Wydra Nowicjusz (240 p.)
0 głosów
2 odpowiedzi 464 wizyt

92,092 zapytań

140,753 odpowiedzi

317,719 komentarzy

61,410 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 162p. - nidomika
  2. 160p. - CC PL
  3. 158p. - Łukasz Eckert
  4. 78p. - Jarosław Roszyk
  5. 77p. - sefirek
  6. 76p. - Fiji404
  7. 75p. - rucin93
  8. 0p. - Igorek :D
  9. 0p. - RadoslawTaborski
  10. 0p. - ScriptyChris
  11. 0p. - Mikbac
  12. 0p. - Klaudia
  13. 0p. - Michał Tartanus
  14. 0p. - KreciX h
  15. 0p. - Arkadiusz Olczak
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! ♡

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

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...