Aktualizacja PHP
31 października 2026
- Podatność w PHP wymusiła aktualizację PHP (CVE-2026-109618, CVE-2026-109619)
- Aktualizacja PHP wymusiła aktualizację SMF z 2.0.19 do 2.1.8
- Aktualizacja SMF wymusiła zmianę kodowania (encoding) oraz wprowadzenie na nowo zmian by dopasować forum do reszty serwisu
- Zmiana kodowania wymusiła naprawę tabel w bazie danych SMF
1. Aktualizacja PHP
CytatPHP only supports version 8.2 and later. Servers on PHP 8.1 or older get no official fix.
PHP has released 8.5.12, 8.4.27, 8.3.36 and 8.2.35 to address this.
https://sansec.io/research/php2shell
https://www.php.net/archive/2026.php#2026-10-21-5
Są jednak tak zwane "backporty". Wolałem jednak użyć najnowszej wersji PHP.
Jak tylko dostawca mojego hostingu udostępnił poprawioną wersję PHP - ustawiłem globalnie używanie najnowszej wersji.
Użycie najnowszej wersji PHP spowodowało kilkanaście błędów w kodzie n-gry i home, ale także parę w samym SMF 2.1.8 (dodanie 5-tego parametru do wywołania pewnej funkcji).
W większości polegało to na dodaniu sprawdzenia "isset()" przed użyciem zmiennej (starsze wersje PHP pozwalały na użycie niezainicjowanej zmiennej).
Włączyłem wyświetlanie errorów w PHP (tylko dla mojego IP) by widzieć na bieżąco gdzie pojawiają się błędy i czy poprawki w kodzie je usuwają.
Sprawdzałem także logi błędów zapisywane przez SMF, a także te dostępne w cPanel - najbardziej wiarygodne źródło pokazujące wszystkie błędy PHP z całego konta.
2. Aktualizacja SMF
CytatSMF 2.1.8 supports PHP 8.5, 8.4 and 8.3. SMF 2.0 and below are not supported and it is recommended you upgrade to SMF 2.1 as soon as possible. Older SMF versions have limited or no support for PHP 8.2 or higher.https://www.simplemachines.org/community/index.php?topic=595217
https://wiki.simplemachines.org/smf/Hacking_-_I_think_I_have_been_hacked
Aktualizacja SMF z 2.0.19 na 2.1.8 nie wydaje się dużą aktualizacja, ale zmian było naprawdę sporo. Prostsze było nadpisanie wszystkich plików i odtworzenie moich modyfikacji na wyświetlanie forum n-gry.pl.
Ciekawostka - aktualizacja SMF ma odpowiednie skrypty do obsługi aktualizacji (również by podmienić Settings.php czy strukturę bazy danych). W przypadku N-Gry skrypt ten już na samym początku tego procesu wyrzucał błąd. Ostatecznie wykonałem skrypty aktualizacji poprzez Bash terminal ("php upgrade.php") w cPanel. Skrypty wykonały się poprawnie. Ważne było także to, by plik Settings.php zapisać w kodowaniu UTF-8.
Warto wspomnieć także o istotnej zmianie w obsłudze avatarów pomiędzy wersjami 2.0.19 a 2.1.8. Avatary nie są już traktowane jak zwykłe załączniki. Poprawiłem kod PHP do wyświetlania avatarów autorów artykułów/plików w serwisie (używając do tego SSI).
3a. Zmiana kodowania (encoding)
Niedawno robiłem poprawki do starego kodowania ISO-8859-2 (wymuszone - jak mi się wydaje - przez aktualizację wersji MySQL na hostingu, który używam). Teraz przy aktualizacji SMF do 2.1.8 musiałem wszystko przekonwertować na UTF-8.
Pliki trzeba było otworzyć używając starego kodowania i zapisać używając nowego.
Jednak z bazą danych było trochę więcej roboty... (punkt 5 poniżej).
3b. Poprawki wyglądu
Nadpisanie wszystkich plików SMF wymagało odtworzenie moich modyfikacji na wyświetlanie forum n-gry.pl (https://n-gry.pl/forum/index.php?topic=2961).
Jak to wyglądało przed a jak po:
4. Naprawa bazy danych
Skrypty aktualizujące forum spowodowały niepoprawne wyświetlanie polskich znaków. Na szczęście informacje o tych znakach pozostały nietknięte, zepsute było tylko ich wyświetlanie. Aby wyświetlanie polskich znaków działało poprawnie wszędzie (na serwisie, na forum, ale także na phpMyAdmin) ostatecznie:
- eksportowałem wszystkie tabele, w których zapisywany jest tekst wprowadzany przez użytkowników,
- zmieniałem komendę SQL tworzącą tabele (CHARSET i COLLATE),
- by odzyskać "zepsute" polskie znaki, otwierałem pliki z wyeksportowaną tabelę i komendą SQL jako ISO-8859-2, zmieniałem kodowanie na ISO-8859-1 (ale cofając zmiany w pliku, które ten proces powodował), mając ISO-8859-1, zmieniałem kodowanie na ISO-8859-2 (tutaj bez cofania zmian, które ten proces powodował) (dopiero wtedy pojawiły się poprawnie polskie znaki) i dopiero wtedy zapisywałem ten plik jako UTF-8,
- usuwałem starą tabelę w bazie danych,
- importowałem tabelę używając zmienionych komend SQL by stworzyć na nowo
(oznaczone na żółto, pozostałe to misje ukończone "ostatnio", czyli 9 lat temu i parę dodatkowych misji).