Jeśli po migracji serwera lub aktualizacji oprogramowania Twoje skrypty lub programy przestały poprawnie pobierać listę plików (np. nie widzą plików o konkretnym rozszerzeniu .xml czy .jpg), przyczyną może być zmiana w konfiguracji serwera FTP.
W najnowszych wersjach oprogramowania Pure-FTPd (od 1.0.48 wzwyż) wprowadzono istotne zmiany w obsłudze polecenia NLST. Poniżej wyjaśniamy, dlaczego tak się stało i jak dostosować swoje rozwiązania, aby znów działały poprawnie.
SPIS TREŚCI
- Dlaczego filtrowanie plików (np. *.xml) przestało działać?
- Jak naprawić działanie skryptów?
- Dodatkowe informacje
Dlaczego filtrowanie plików (np. *.xml) przestało działać?
Wcześniej serwery pozwalały na używanie tzw. globbingu, czyli znaków specjalnych (takich jak gwiazdka *) bezpośrednio w zapytaniu do serwera. Przykładowo, komenda NLST *.xml prosiła serwer o znalezienie i wysłanie listy tylko tych plików.
Obecnie funkcja ta została wyłączona z dwóch ważnych powodów:
- Bezpieczeństwo: Wyłączenie globbingu chroni serwer przed atakami typu DoS (Denial of Service). Atakujący mogli tworzyć skomplikowane struktury katalogów, które „zawieszały” procesor serwera podczas próby ich przeszukania.
- Standardy: Zmiana ta sprawia, że serwer jest w 100% zgodny z oficjalnymi standardami internetowymi (RFC), które określają, jak powinien działać protokół FTP.
Jak naprawić działanie skryptów?
Masz dwie główne drogi, aby przywrócić poprawną komunikację z serwerem.
Opcja A: Użycie polecenia MLSD (Zalecane)
To najbardziej nowoczesne i stabilne rozwiązanie. Zamiast prosić serwer o przefiltrowanie plików, pobierasz pełną listę, a następnie wybierasz interesujące Cię pliki bezpośrednio w swoim programie lub skrypcie.
- Jak to działa? Wystarczy zmienić w kodzie polecenie NLST na MLSD.
- Zaleta: Masz pełną kontrolę nad danymi i Twoje rozwiązanie jest odporne na przyszłe aktualizacje serwerów.
Opcja B: Zamiana NLST na LIST
Jeśli potrzebujesz szybkiej zmiany i chcesz nadal używać gwiazdek (*), możesz zmienić polecenie NLST na LIST. Polecenie LIST wciąż wspiera globbing, ale przesyła dane w innym formacie.
Polecenie NLST zwracało tylko same nazwy plików. Polecenie LIST zwraca pełne informacje (rozmiar, datę, uprawnienia). Jeśli Twój skrypt „oczekuje” tylko nazwy pliku, będziesz musiał(a) dostosować jego kod, aby wyciągał z otrzymanego ciągu znaków tylko to, co jest Ci potrzebne.
Praktyczne porównanie: NLST vs LIST
Zobacz, jak różnią się odpowiedzi serwera dla tych dwóch poleceń. Pomoże Ci to zrozumieć, jakie zmiany musisz wprowadzić w swoim parserze (części kodu czytającej dane).
| Polecenie | Co wysyła serwer? (Output) | Uwagi |
|---|---|---|
| NLST | faktura.xml | Zwraca tylko czystą nazwę pliku. Nie wspiera już *. |
| LIST | <-rw-r--r-- 1 user group 1024 Mar 19 10:00 faktura.xml | Wspiera *, ale zwraca pełne metadane (format znany z systemów Linux). |
Dodatkowe informacje
Jeśli korzystasz z gotowego programu (np. FileZilla, WinSCP) i napotykasz błędy, upewnij się, że używasz jego najnowszej wersji. Większość nowoczesnych klientów FTP automatycznie korzysta z bezpiecznych i aktualnych poleceń.