realpath

funkcja

Rozwiązuje wszystkie dowiązania symboliczne i normalizuje ścieżkę do bezwzględnej. Zwraca string lub false gdy ścieżka nie istnieje.

realpath(string $path): string|false

realpath przekształca podaną ścieżkę (względną, zawierającą .. lub dowiązania symboliczne) na bezwzględną, kanoniczną ścieżkę w systemie plików. Jeśli ścieżka nie istnieje lub brak uprawnień do jej sprawdzenia, funkcja zwraca false. To kluczowe narzędzie do walidacji ścieżek — po wywołaniu realpath możesz sprawdzić, czy wynikowa ścieżka zaczyna się od oczekiwanego katalogu bazowego, co skutecznie blokuje ataki path-traversal.

Bezpieczeństwo: zawsze porównuj wynik realpath z katalogiem bazowym aplikacji, zanim użyjesz ścieżki pochodzącej od użytkownika — to najprostszy i najskuteczniejszy sposób obrony przed path-traversal.

<?php
declare(strict_types=1);

$katalogBazowy = realpath(__DIR__ . '/pliki');
if ($katalogBazowy === false) {
    http_response_code(500);
    exit('Błąd konfiguracji');
}
$zadanaSciezka = $_GET['plik'] ?? '';

// Rozwiązujemy ścieżkę bez sprawdzania istnienia pliku (łączymy i wywołujemy realpath)
$pelnaSciezka = realpath($katalogBazowy . '/' . $zadanaSciezka);

if ($pelnaSciezka === false || !str_starts_with($pelnaSciezka, $katalogBazowy . '/')) {
    http_response_code(403);
    exit('Dostęp zabroniony.');
}

echo file_get_contents($pelnaSciezka);