open_basedir ogranicza dostęp skryptów PHP do plików w katalogu danej strony WWW. W dPanelu ta opcja jest domyślnie aktywna dla każdej nowo dodanej strony WWW.
Ustawienie pomaga określić, z których katalogów skrypt PHP może korzystać podczas pracy z plikami. Ma znaczenie wtedy, gdy aplikacja, wtyczka lub własny skrypt próbuje odczytać albo otworzyć plik wskazany ścieżką.
Spis treści
Jak działa open_basedir?
open_basedir to ustawienie PHP, które ogranicza listę plików dostępnych dla interpretera PHP. Gdy jest aktywne, skrypt może odwoływać się tylko do plików znajdujących się w strukturze katalogu przypisanego do danej strony WWW.
Przed wykonaniem operacji na pliku PHP sprawdza wskazaną ścieżkę. Dotyczy to między innymi prób otwarcia, odczytu lub użycia pliku przez funkcje PHP pracujące na ścieżkach.
Przykładem jest funkcja fopen(). Jeśli skrypt próbuje otworzyć plik, PHP sprawdza, czy ten plik znajduje się w dozwolonym katalogu. Jeśli ścieżka wychodzi poza strukturę danej strony WWW, polecenie nie zostanie wykonane.
Jaki komunikat pojawia się przy blokadzie open_basedir?
Gdy skrypt próbuje uzyskać dostęp do pliku poza dozwolonym katalogiem, interpreter PHP zwraca komunikat:
Warning: open_basedir restriction in effect To jest spodziewane zachowanie. Komunikat oznacza, że PHP zatrzymało próbę dostępu do pliku spoza katalogu przypisanego do danej strony WWW.
Co oznacza open_basedir dla strony WWW?
Dla większości stron WWW aktywna opcja open_basedir nie wymaga żadnych działań. Strona działa poprawnie, jeśli jej pliki, biblioteki i zasoby znajdują się w katalogu przypisanym do tej strony.
Komunikat o ograniczeniu może pojawić się wtedy, gdy aplikacja lub wtyczka próbuje użyć pliku z innej lokalizacji. Może to wynikać z konfiguracji ścieżek, sposobu działania skryptu lub użycia ścieżki bezwzględnej prowadzącej poza katalog strony.
open_basedir a katalog strony WWW
Katalog strony WWW to miejsce, w którym znajdują się pliki danej strony. Gdy open_basedir jest aktywne, ten katalog wyznacza dozwolony obszar pracy dla operacji PHP na plikach.
Jeśli skrypt odwołuje się do pliku wewnątrz katalogu strony, operacja może zostać wykonana zgodnie z pozostałymi ustawieniami PHP i uprawnieniami pliku. Jeśli skrypt wskazuje plik poza tą strukturą, PHP blokuje operację i zwraca ostrzeżenie.
Aktywne open_basedir a wyłączone open_basedir
- Aktywne open_basedir ogranicza skrypty PHP do katalogu danej strony WWW. Pomaga oddzielić pliki jednej strony od plików znajdujących się poza jej strukturą.
- Wyłączone open_basedir usuwa to ograniczenie po stronie PHP. Skrypt może wtedy próbować odwoływać się do plików poza katalogiem strony, jeśli pozwalają na to inne ustawienia i uprawnienia.
Wyłączenie open_basedir może być potrzebne tylko w szczególnych przypadkach, gdy aplikacja musi korzystać z plików poza katalogiem strony WWW. Przed taką zmianą warto sprawdzić, czy aplikacja nie może działać z plikami umieszczonymi w dozwolonej strukturze katalogów.
Jakie są ryzyka po wyłączeniu open_basedir?
Po wyłączeniu open_basedir skrypt PHP nie jest już ograniczony przez tę konkretną regułę do katalogu danej strony WWW. Oznacza to szerszy zakres możliwych odwołań do plików.
Najważniejsze ryzyka to:
- większy zakres dostępu skryptu – skrypt może próbować pracować na plikach spoza katalogu strony WWW,
- większe skutki błędnej konfiguracji – nieprawidłowa ścieżka w aplikacji może wskazywać miejsce poza strukturą danej strony,
- większe skutki podatności w kodzie – jeśli aplikacja ma lukę pozwalającą na zmianę ścieżek, brak open_basedir może zwiększyć zakres plików, do których skrypt będzie próbował się odwołać,
- słabsza separacja plików – strony działające w różnych katalogach są mniej chronione przed odwołaniami wykonywanymi przez skrypty PHP z innej lokalizacji.
Z tego powodu wyłączenie open_basedir warto traktować jako wyjątek, a nie domyślne ustawienie. Zwykle lepiej dostosować ścieżki aplikacji lub przenieść wymagane pliki do katalogu danej strony WWW.
Kiedy komunikat open_basedir jest normalnym zachowaniem?
Komunikat Warning: open_basedir restriction in effect jest spodziewanym zachowaniem, gdy skrypt próbuje wyjść poza dozwoloną strukturę katalogów. Nie oznacza awarii PHP. Oznacza, że mechanizm ograniczający dostęp do plików zadziałał.
W takiej sytuacji warto sprawdzić:
- jaką ścieżkę do pliku wskazuje skrypt,
- czy plik znajduje się w katalogu danej strony WWW,
- czy aplikacja lub wtyczka nie używa ścieżki bezwzględnej prowadzącej poza katalog strony,
- czy wymagany plik można przenieść do dozwolonej struktury katalogów,
- czy konfiguracja aplikacji wskazuje poprawny katalog.
Co zrobić, gdy strona pokazuje błąd open_basedir?
- Sprawdź pełną treść komunikatu błędu i nazwę pliku, którego dotyczy ostrzeżenie.
- Ustal, czy wskazana ścieżka znajduje się w katalogu danej strony WWW.
- Jeśli ścieżka wychodzi poza katalog strony, popraw konfigurację aplikacji lub wtyczki.
- Jeśli aplikacja wymaga pliku z innej lokalizacji, rozważ przeniesienie tego pliku do katalogu strony WWW.
- Jeśli nie masz pewności, czy zmiana jest bezpieczna, skontaktuj się z pomocą techniczną przed wyłączeniem ograniczenia.
Jeśli problem dotyczy działania konkretnej wersji PHP, pomocny może być osobny artykuł o zmianie wersji PHP w dPanelu: Jak zmienić wersję PHP?.
Podsumowanie
open_basedir ogranicza dostęp skryptów PHP do katalogu danej strony WWW. Dzięki temu skrypt nie może swobodnie odwoływać się do plików poza strukturą tej strony.
Opcja jest domyślnie aktywna dla każdej nowo dodanej strony WWW w dPanelu. Jej wyłączenie może zwiększyć zakres dostępu skryptów do plików, dlatego warto robić to tylko wtedy, gdy jest to potrzebne i po sprawdzeniu konfiguracji aplikacji.
