Wyobraź sobie sytuację. Budzisz się w piękny jesienny poranek, sprawdzasz czy na Twojej stronie nie pojawiły się nowe komentarze, albo chcesz po prostu popełnić kolejny wpis bo dopadł Cię nagły przypływ weny. Wchodzisz na stronę, a tu zonk. Nic nie ma. Myślisz sobie „pewnie jakiś błąd serwera” – wchodzisz do panelu, a tam nie ma nic. Po plikach Twojej strony opartej o WordPress nie ma ani śladu.
Co więcej, tworzyłeś jakąś wtyczką regularne kopie zapasowe, a tu nic nie ma… Panika, żal, wyrywanie włosów…
Myślisz, że powyższa sytuacja jest niemożliwa? Masz zaktualizowane wszystkie wtyczki, WordPress w najnowszej wersji podobnie jak motyw, więc co może pójść nie tak? Otóż to całkiem możliwe, jeśli masz słabo zabezpieczoną stronę. Miałem już kilka takich przypadków, najpierw włamanie, później całkowity brak strony. Dlaczego?
Otóż od władnych paru miesięcy nawet twórcy WordPress wiedzą o luce w WordPressie, która może powodować właśnie powyższe problemy. I co? Nic z tym do tej pory nie zrobili, więc jak masz najnowszego WordPress nie możesz ot tak czuć się bezpiecznym. Od zawsze tłumaczę to swoim klientom, aktualizacje to nie wszystko!
Zacznijmy od tego, ze najpierw ktoś musi się włamać Wam na stronę, co w dzisiejszych czasach (jeśli nie zabezpieczona jest odpowiednio) nie jest wcale takie trudne. A ile osób ma dalej standardowy login „admin”? Co więcej, nie potrzebne jest konto administratora do wykorzystania luki, może być nawet autor, a nawet błędna konfiguracja samej strony daje wolną drogę do dalszej „zabawy”.
Ktoś kto wykorzysta tę lukę może usunąć DOWOLNY plik z instalacji WordPress na waszych serwerach zakładając, że dany użytkownik na serwerze ma uprawniania do jeszcze innych stron, więc i one będą na to podatne. Więc masz hosting współdzielony z ogromną ilością stron to masz problem…
To kto ma przechlapane?
Każdy, nawet Ci którzy mają wersję WordPress 4.9.6 – takkk dobrze czytacie.
Wystarczy wykorzystać funkcje wp_delete_attachement(), unlink() i zmienną $filename.
Czy można się jakoś ratować?
Jest tymczasowa łatka, która polecam zastosować już teraz i nie czekać, aż twórcy WordPressa załatają ją w kolejnych aktualizacjach, o ile to zrobią – bo jakoś im się nie śpieszy.
Zalogujcie się do panelu WordPressa, wybierzcie Wygląd→ Edytor i właczcie do edycji plik functions.php.
Na samym końcu wspomnianego pliku wklejcie poniższy kod i zapiszcie zmiany.
add_filter( 'wp_update_attachment_metadata', 'rips_unlink_tempfix' ); function rips_unlink_tempfix( $data ) { if( isset($data['thumb']) ) { $data['thumb'] = basename($data['thumb']); } return $data; }
Funkcja wykorzystuje wywołanie wp_update_attachement_metadata() i wymusza wykorzystanie funkcji basename() na tablicy $data, a ona już odfiltruje sama niepożądane wartości.
Na koniec sprawdźcie czy wszystko działa na stronie poprawnie, nie mam wpływu na to czy wystąpią jakieś konflikty między wtyczkami bądź używanymi motywami. Pamiętajcie, aby przed każdą modyfikacją plików robić kopie zapasowe. W razie problemów bez problemu przywrócicie stronę do porządku.
Aktualizacja
Jak się okazuje, w wersjach 4.9.7 i 4.9.8 błąd został naprawiony. Gorąco zalecam do aktualizacji jeśli nie robicie tego na bieżąco.
Gdyby mnie spotkała taka sytuacja, chyba bym się rozpłakał ze złości. 😛
Zawsze należy robić kopie, bezwzględnie.