W PDW Filebrowsera pod TinyMCE brakuje możliwości dodania filtru ‚*.*’ tak aby okno wskazywania plików pokazywało wszystkie pliki.
Ustawienie filtru ‚*’ dla $extension_whitelist powoduje, że w oknie wyboru pliku wszystkie pliki są widoczne lecz żaden uploadowany plik fizycznie nie wgrywał się na dysk.
Okazuje się, że w kodzie listę rozszerzeń plików „rozbijana” jest na tablicę używając przecinka jako separatora. Następnie przy wgrywaniu pliku wydziela z niego rozszerzenie i sprawdza czy takowe istnieje w powstałej przez rozbicie tablicy. Jeśli istnieje – plik jest wgrywany na dysk serwera do odpowiedniego katalogu. Jeśli nie ląduje gdzieś w kosmosie. Ustawiając $extension_whitelist na ‚*’ po takim rozbiciu uzyskuje się tablicę rozszerzeń, w której jedynym elementem jest *. Skrypt porównując rozszerzenie pliku z zawartością tej tablicy nie znalazł podobieństw i uznał, że rozszerzenie nie jest dozwolone … nie wgrał plików na serwer.
Problem można obejść dopisując kilka prostych linijek kodu w pliku upload.php (katalog swfupload) w linii 78.
Linie:
$is_valid_extension = false; $allowedExtensions = explode(',', $extension_whitelist);
Zmieniamy na:
if ($extension_whitelist == '*') { $is_valid_extension = true; } else { $is_valid_extension = false; $allowedExtensions = explode(',', $extension_whitelist); }
Proste, łopatologiczne … acz skuteczne :P