Local File Inclusion
Local File Inclusion (LFI, dołączanie plików lokalnych) to podatność aplikacji internetowej, która pozwala atakującemu spowodować dołączenie i odczyt dowolnego pliku znajdującego się na serwerze. Luka powstaje, gdy aplikacja buduje ścieżkę do dołączanego pliku na podstawie danych od użytkownika bez odpowiedniej walidacji.
Na czym polega atak LFI
Podatność najczęściej dotyczy skryptów, które ładują pliki na podstawie parametru w adresie URL, na przykład ?strona=kontakt. Jeśli aplikacja bezpośrednio wstawia wartość parametru do funkcji dołączającej plik (jak include w PHP), atakujący może podmienić ją na ścieżkę do innego pliku. Klasyczną techniką jest path traversal — użycie sekwencji ../, by wyjść poza przewidziany katalog i sięgnąć po pliki systemowe, konfiguracyjne czy zawierające dane uwierzytelniające. W skrajnych przypadkach, w połączeniu z innymi lukami (np. możliwością zapisu do logów), LFI prowadzi do zdalnego wykonania kodu. To odmienny wektor niż SQL injection czy XSS, choć wszystkie wynikają z tego samego grzechu: zaufania danym od użytkownika.
Zastosowanie w praktyce
Ochrona przed LFI opiera się na kilku zasadach. Podstawą jest rygorystyczna walidacja i sanityzacja danych wejściowych — najlepiej przez białą listę dozwolonych wartości, zamiast prób filtrowania niebezpiecznych znaków. Nigdy nie należy przekazywać surowego parametru użytkownika bezpośrednio do funkcji operujących na plikach. Pomaga też odpowiednia konfiguracja serwera i uprawnień, uruchamianie aplikacji z minimalnymi przywilejami oraz firewall aplikacyjny (WAF), który wychwytuje typowe wzorce path traversal.
Podatność LFI figuruje w klasyfikacjach OWASP w kategorii błędów kontroli dostępu i wstrzyknięć. Regularne testy penetracyjne oraz przeglądy kodu to najskuteczniejszy sposób, by wykryć takie luki, zanim zrobi to atakujący.
Warto odróżnić LFI od pokrewnej podatności RFI (Remote File Inclusion), w której dołączany plik pochodzi ze zdalnego serwera — RFI jest groźniejsze, ale współczesne konfiguracje PHP domyślnie blokują ładowanie plików z adresów URL. W obu przypadkach źródłem problemu jest ta sama zła praktyka: budowanie ścieżki do pliku wprost z danych użytkownika. Utrzymywanie oprogramowania i bibliotek w aktualnych wersjach dodatkowo redukuje ryzyko, bo wiele znanych podatności tego typu jest łatanych przez producentów w kolejnych wydaniach.
Powiązane pojęcia
Najczęstsze pytania
Czym różni się LFI od RFI?
LFI (Local File Inclusion) polega na dołączeniu pliku znajdującego się na tym samym serwerze, co aplikacja. RFI (Remote File Inclusion) dołącza plik z zewnętrznego, zdalnego adresu URL, co pozwala wprost wstrzyknąć własny kod. RFI jest groźniejsze, ale współczesne konfiguracje PHP domyślnie je blokują.
