Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Zabezpieczenie panelu administratora
Forum PHP.pl > Forum > Przedszkole
TimeMaster
Witam.
Tworzę małą portalopodobną stronę, na której jest możliwość rejestracji, dodawania contentu itd. Dla wygody zarządzania zrobiłem panel admina.
W bazie użytkownik ma kolumnę 'id_rangi' (ranga admina to 0). Przy logowaniu pobieram do $_session id_rangi i na stronach panelu sprawdzam:
  1. if ($_SESSION['id_rangi'] !== 0) {
  2. header("Location: ../");
  3. } else { ....


Sesje zabezpieczyłem funkcją:
  1. function session() {
  2. if (!isset($_SESSION['init']))
  3. {
  4. $_SESSION['init'] = true;
  5. $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  6. }
  7.  
  8. if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'])
  9. {
  10. die('Coś jest nie tak!!');
  11. logout();
  12. }
  13. }


Chodzi głównie o to, by dane użytkowników (Imię, Nazwisko, Nr. telefonu, Adres) nie dostały się w niepowołane ręce.
Czy poza ustawieniem prawidłowo praw do plików i powyższymi 'zabezpieczeniami' można coś jeszcze zastosować, by ukrócić starania wścibskiego użytkownika z Kali Linux? smile.gif
dublinka
Nazwy pliku nikt nie pozna wiec....

Podajeesz trzy rozne sesje i nic wiecej.

Zrob jakas funkcje ktora wywolujesz za kazdym razem. Sprawdzaj czy zarejestrowana sesja rowna jest wartosci z bazy a nie jak to teraz !== 0

Czyli:

Kod
if ($_SESSION['id_rangi'] != $AdminDetails)
{
//exit;

}

dalej


W pierwszym przykladzie podajesz jedna sesje w drugim niby jakies zabezpieczenie. Tylko czego ?



TimeMaster
Cytat
W pierwszym przykladzie podajesz jedna sesje w drugim niby jakies zabezpieczenie. Tylko czego ?


Drugie zabezpieczenie jest przed linkiem z PHPSESSID
dublinka
Cytat(TimeMaster @ 27.03.2019, 00:14:23 ) *
Drugie zabezpieczenie jest przed linkiem z PHPSESSID

Obawiam sie ze Cie nie rozumiem.
W tamtym przkadzie sprawdzasz jakas sesje a czym ona jest to tylko ty wiesz. Nastepnie masz kolejna sesje z ip i sprawdzasz ja ze zmienna globalna SERVER i jesli da rozne to wysw odpowiedni komunikat.
Jedyne co robisz to regenerujesz id sesji ale to zadne zabezpieczenie. Skup sie na zapytaniach do bazy bo tym moze ktos se dostac do detali.

Jesli chodzi o SQL injection to jak korzystasz z mysqli to korzystaj z mysqli, bind_param i prepare. Pamiętaj jeszcze o o atakach XSS.

https://php.net/manual/en/mysqli.prepare.php

Jesli nie chcesz aby ktos Ci narobil balaganu to najprostszym rozwiazaniem jest trzymanie waznych plikow poza folderem "public_html" ; umiesc te pliki w jakims jeszcze jednym kat i daj go wyzej w hierarchii (wyjdz z kat public_html) a same pliki includnij.
TimeMaster
Sprawdzam IP z sesji i ze zmienną SERVER by uniknąć wykradania sesji. Wystarczy na tym forum wejść w narzędzie 'zbadaj element', zakładka DANE (w FF, nie wiem jak w innych) i mamy forum_session_id... Teraz na nieogarniającej nic osobie można za pomocą phishingu wyłudzić id sesji i użyć jej w hijackingu - stąd zabezpieczenie sprawdzające IP zapisane w sesji i IP użytkownika. Teraz pytanie, czy jest to jakiekolwiek zabezpieczenie (dla amatorów najpewniej tak). Nie potrzebuję zabezpieczeń rodem z aplikacji bankowych, wolę być świadomy i w jakimś stopniu przygotowany. Raczej nie spodziewam się, że przechowywane dane będą łakomym kąskiem. Jednak będę spał spokojniej, wiedząc, że hacker zrezygnował z wydobycia danych przez stronę/serwer/bazę i stwierdził, że łatwiej będzie je wyciągnąć bezpośrednio od użytkownika.
dublinka
Cytat(TimeMaster @ 27.03.2019, 14:16:13 ) *
Sprawdzam IP z sesji i ze zmienną SERVER by uniknąć wykradania sesji. Wystarczy na tym forum wejść w narzędzie 'zbadaj element', zakładka DANE (w FF, nie wiem jak w innych) i mamy forum_session_id... Teraz na nieogarniającej nic osobie można za pomocą phishingu wyłudzić id sesji i użyć jej w hijackingu - stąd zabezpieczenie sprawdzające IP zapisane w sesji i IP użytkownika. Teraz pytanie, czy jest to jakiekolwiek zabezpieczenie (dla amatorów najpewniej tak). Nie potrzebuję zabezpieczeń rodem z aplikacji bankowych, wolę być świadomy i w jakimś stopniu przygotowany. Raczej nie spodziewam się, że przechowywane dane będą łakomym kąskiem. Jednak będę spał spokojniej, wiedząc, że hacker zrezygnował z wydobycia danych przez stronę/serwer/bazę i stwierdził, że łatwiej będzie je wyciągnąć bezpośrednio od użytkownika.


https://stackoverflow.com/questions/1223340...ssion-hijacking

tutaj ma sz mysle wystarczajace wyjasnienie. Jest napisane ze myki z ip nie sa dobrym rozwiazaniem. Po pierwsze IP sa teraz w wiekszosci dynamiczne.
viking
Zamiast sesji wykorzystaj szyfrowany token JWT, a zamiast takiego smieciowego kodu jakiś microframework typu Slim.
TimeMaster
@dublinka Dzięki wielkie smile.gif

@viking Myślałem nad microframeworkiem do tego projektu, a nawet o Wordpressie ale stwierdziłem, że napiszę w czystym php, żeby podszlifować umiejętności smile.gif
viking
To jednego jestem pewien. Stosując się do pewnych dobrych wzorców (FW mocno wykorzystują PSR) dużo więcej się nauczysz niż klepiąc takie funkcje jak ta wyżej.
dublinka
Jest jakis spospb na usuniecie poprzednjego id sesji ? Bp session_regenerate_id() tylko generuje nowe ale stare pozostaja
viking
session_regenerate_id ([ bool $delete_old_session = FALSE ] ) : bool
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.