Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Bezpieczeństwo. Dostep skryptu php do katalogów podrzędnych?
Forum PHP.pl > Forum > PHP
starterrrrr
Witam.

Zastanawiam się nad kwestią bezpieczeństwa skryptu. Prosze mi podpowiedzieć, jak ograniczyć dostęp skryptom tylko do pewnego poziomu katalogów, tak, żeby któś z poziomu skryptu php nie mógł mi zajrzeć co mam niżej.


Kiedyś widziałem na serwerze taki mechanizm, wiem, że sprawiałmi problemy własnie z dostępem do pewnych niższych katalogów, nie wiem, czy admin to nie wyłączył, było to chyba w trybie safe_mode.
Teraz widze, że jest to bardzo dobre rozwiązanie.

Prosze o jakąś podpowiedź. Czy można to zrobić dla całego serwera? Czy można zrobić wyjątek dla okreslonych plików?
viking
Open_basedir. Generalnie wszystkie pliki powinny byc poza katalogiem public a wrzucane przez uzytkownikow pliki na innej domenie bez możliwości wykonywania ale zwłaszcza w darmowych skryptach nikt o to nie dba.
Damonsson
Cytat(viking @ 24.08.2016, 11:50:41 ) *
a wrzucane przez uzytkownikow pliki na innej domenie

I najlepiej na innej planecie lub księżycu, a jeszcze lepiej w innym wymiarze wink.gif


Jak ustawisz na serwerze odpowiednie uprawnienia dla użytkownika, to użytkownik nie będzie miał żadnych praw do innych/niższych plików niż tylko te, które są w jego katalogu. Nie zablokujesz, jakoś sensownie, dostępu do plików/funkcji, które są używane przez inne skrypty w tym projekcie, bo projekt by po prostu nie działał.

Cytat
któś z poziomu skryptu php
dawanie komuś takiej możliwości to już jest niebezpieczeństwo.
viking
Nigdy w pełni nie zabezpieczysz się przed atakami. W związku z czym każdy wgrany materiał z zewnątrz (niepewny) wyświetlony na stronie to już niebezpieczeństwo. A z samymi obrazkami różne ciekawe rzeczy były robione. Wrzucanie ich na domenę która umożliwia wykonywanie języków skryptowych to kolejne ułatwienie ataku. Poza tym pliki serwowane statycznie są dostarczane szybciej przez serwer i można ładny cache im dać.
lukaskolista
Tylko co to ma do domeny?

Cytat
Wrzucanie ich na domenę która umożliwia wykonywanie języków skryptowych to kolejne ułatwienie ataku.

Od kiedy domena ma coś wspólnego z "wykonywaniem języków"?
kukix
Chodzi o to, że czasami "niestety" muszę udostępnić komuś dostęp przez FTP do pewnych katalogów na serwerze. Są tam często szablony graficzne, alebo katalog z webserwisem w php, który musi się wykonywac.

Boje się , że ktoś za pomocą skryptu php uzyska dostęp do najniższych katalogów serwera.

Jest to serwer nq.pl, wszystkie instancje skryptu wgrywam do katalogu html/ , wygląda to tak

/html/instancja_skryptu1
/html/instancja_skryptu2
/html/instancja_skryptu3
/html/instancja_skryptu4

w każdym z tych katalogów są skrypty php, czasami udostępniam dostęp do pewnych podkatalogów.

Czy moge ustawić, żeby np dla instancji 2 katalog: /html/instancja_skryptu2/ był najniższym poziomem i żeby nie można było zaglądnąć niżej, czyli do katalogu /html/ oraz innej instancji?

viking
Cytat(lukaskolista @ 24.08.2016, 15:08:07 ) *
Od kiedy domena ma coś wspólnego z "wykonywaniem języków"?


Od zawsze. Na konkretnej domenie/subdomenie możesz aktywować języki skryptowe lub tylko statyczne pliki.

A odpowiadając na pytanie, nie możesz. Skrypt i tak będzie działał na prawach użytkownika.
Damonsson
instancja_skryptu1 - tworzysz nowego usera systemu o nazwie np: "instancja_skryptu1"
instancja_skryptu2 - tworzysz nowego usera systemu o nazwie np: "instancja_skryptu2"

Wtedy ustawiasz odpowiednie uprawnienia i użytkownik np. "instancja_skryptu2" nie zejdzie niżej niż do swojego folderu "instancja_skryptu2". I jak gość chce dostęp do FTP, podajesz mu dane do konta "instancja_skryptu2".

A jak chcesz dać dostęp do jeszcze wyższego katalogu, to sobie tworzysz jeszcze nowego usera np o nazwie "specjalny", który ma dostęp tylko do "/html/instancja_skryptu2/obrazki/nietajne" i wyżej, ale nie niżej. Oczywiście jak robisz to często to musiałbyś sobie napisać jakiś prosty skrypt do tworzenia takich użytkowników.
starterrrrr
Witam.

Wyczytałem, że jest do tego mechanizm OPEN_BASEDIR, który nada się idealnie.

podglądając php_info() widzę, że open_basedir ma taką wartość:

Kod
/alt/home/webmaster.darex/:/home/webmaster.darex/:/usr/lib/php:/var/lib/php/darex



Myślałem, żeby w katalogu html/ umieścić plik .htaccess a w nim wartość:
Kod
php_value open_basedir /alt/home/webmaster.darex/html/katalog_z_instancja/


Zamiast "katalog_z_instancja" można by dac *, żeby wszystkie katalogi z automatu były objęte.
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.