Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Ograniczyć wykonywanie PHP?

Jest kilka warstw, które musisz chronić.

Niektórzy z usługodawców niepoprawnie polegać na "zabezpieczeniach" PHP, takich jak open_basedir, safe_mode (starsze PHP), disable_functions itp.

Nawet PHP NIE uważa ich za funkcje bezpieczeństwa - http://php.net/security- note.php

Można je wyłączyć dowolnym exploitem dla PHP, a wtedy cały system jest zgubiony, nie rób zrób to.

Jak to zrobić

dół

  • Oddzielny użytkownik na poziomie systemu operacyjnego/systemu dla każdej hostowanej witryny
  • poprawne uprawnienia (jedna strona nie może wyświetlać/edytować strony drugiej) - upewnij się również, że podkatalogi mają odpowiednie uprawnienia, ponieważ będą podobne
  • oddzielne pliki sesji (DUŻO webhostingów umieszcza pliki sesji każdej witryny hostowanej przez PHP w tym samym katalogu, to źle, źle, źle!

Apache wreszcie dostał swój własny moduł do tego - Apache MPM-ITK .

Krótka historia: wyobraź sobie to tak, jakbyś dał użytkownikowi powłokę na komputerze (pod jego własnym uid) — nie może on nic zrobić z innymi hostowanymi witrynami.

  1. inny uid/gid
  2. uprawnienia systemowe
  3. frameworki, takie jak SELinux, AppArmor i podobne
  4. grsecurity jeśli chcesz być hardkorowy... ale system będzie trudniejszy w utrzymaniu.

w górę?

Możesz uzyskać więcej hardkoru. Najlepsze, jakie widziałem, to biblioteka współdzielona dla apache (lub czegokolwiek, czego używasz) - która jest używana, gdy apache jest uruchamiany przy użyciu LD_PRELOAD i implementuje wszystkie potencjalnie złośliwe wywołania systemowe, takie jak system() , execve() i w zasadzie każde inne połączenie, które uznasz za złe.

Nie widziałem jeszcze dobrej implementacji tego (innej niż gdzieś niestandardowej) - popraw mnie, jeśli się mylę.

Upewnij się, że wprowadziłeś do tego białą listę, jak np. mail() w PHP domyślnie wykonuje sendmail i to już nie będzie działać.

konkluzja

Dodaj klasyczne disable_functions, open_basedir, itp. do globalnego php.ini, dodaj session.save_path do każdego vhosta - umieść sesje w katalogach użytkowników. Upewnij się, że użytkownicy nie udostępniają niczego .

Prawidłowo zaimplementuj separację na poziomie systemu operacyjnego.

Uzyskaj hardcore z wywołaniami systemowymi podpinania grsec i LD_PRELOAD lib.

Separacja, separacja, separacja… już wkrótce systemy takie jak Docker zapewnią kontenery oparte na LXC, aby oddzielić użytkowników na poziomie jądra, ale nie są jeszcze gotowe do produkcji (imho).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pobieranie danych z dwóch tabel w mysql, tutaj nie działałoby join

  2. Atak SQL Injection — co to robi?

  3. SSIS i MySQL — problem z ogranicznikiem nazwy tabeli

  4. Skonstruuj zapytanie, aby utworzyć tabele

  5. dodaj tymczasową kolumnę z wartością