Problemy z listowaniem plików FTP (polecenie NLST) – dlaczego moje skrypty przestały działać?

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ć?

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:

  1. 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.
  2. 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.
Ważne: Filtrowanie (np. wybieranie tylko plików .xml) musi odbyć się po stronie Twojej aplikacji.

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.

Uwaga na format danych!
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ń.

  • Czy artykuł był pomocny ?
  • Tak   Nie
lub