Realizacje
Amerykańska platforma subskrypcyjna
Przejęcie istniejącej platformy: audyt, przejście na PHP 8.4 bez przepisywania aplikacji, blokada bota odpowiadającego za około 26% żądań i przeniesienie wideo na CDN. Opisany okres obejmuje osiem miesięcy i 115 wdrożeń bez przestojów.
- Opisany okres prac
- 8 miesięcy
- Wdrożenia
- 115
- Technologie
- PHP 8.4, MySQL, Docker
- Zakres
- audyt, modernizacja, panel, CDN
Punkt wyjścia
Proceduralny PHP pisany przez lata przez różne ręce. Baza obsługiwana przez funkcje usunięte z języka w PHP 7.0 - czyli kod, którego nie da się uruchomić na niczym współczesnym. Płatności przez skrypty CGI w Perlu, wciąż działające. Brak środowiska lokalnego: jedyną instancją, na której cokolwiek dało się sprawdzić, była produkcja.
System obsługiwał płacących klientów, dlatego modernizację trzeba było połączyć z bieżącą obsługą platformy.
Audyt przed decyzją
Zaczęliśmy od audytu oprogramowania - żeby ustalić, które problemy wymagają naprawy, a które elementy mogą działać dalej. Pozwoliło to wybrać zakres modernizacji bez zakładania z góry, że całą aplikację trzeba przepisać.
Audyt wskazał trzy obszary do pilnej pracy: wersję PHP bez wsparcia bezpieczeństwa, luki w kontroli dostępu i koszty utrzymania infrastruktury.
Modernizacja bez przepisywania
Celem było przejście na PHP 8.4. Problem: 46 plików korzystało z funkcji obsługi bazy danych usuniętych z PHP w wersji 7.0. Trzeba było zapewnić ich działanie na nowej wersji języka.
Zamiast tego napisałem warstwę zgodności - osiem usuniętych funkcji zaimplementowanych od nowa na PDO, z typowanymi sygnaturami i tą samą semantyką, której oczekiwał stary kod. Aplikacja przeszła na PHP 8.4 bez zmiany w tych 46 plikach.
Do tego aktualizacja zależności do wersji wspieranych, statyczna analiza kodu i automatyczne formatowanie kodu, oraz środowisko lokalne w kontenerach - żeby przestać testować na produkcji.
To jest modernizacja aplikacji legacy: warstwa zgodności pozwoliła zaktualizować środowisko bez przepisywania wszystkich wywołań bazy danych.
Jeden bot odpowiadał za około 26% żądań
W analizowanym okresie serwer obsługiwał około 90-95 tys. żądań na dobę. Logi pozwoliły wyodrębnić powtarzalny ruch jednego bota.
Największy pojedynczy sprawca odpowiadał za 24,4 tys. żądań dziennie, około 26% całego ruchu, i podszywał się pod ruch z wyszukiwarki Google, fałszując nagłówek Referer. Bot wysyłał w tym nagłówku wciąż ten sam ciąg z parametrami zapytania. Ta powtarzalna sygnatura pozwoliła przygotować filtr.
Filtr blokował żądania z tą sygnaturą. Przez dwa dni sprawdzałem, czy nie odcina prawdziwych użytkowników; w tym okresie nie stwierdziłem takich przypadków. Osobno odcięte zostały agresywne roboty komercyjne, które skanowały cały katalog. Przy okazji: tabela z logiem odwiedzin urosła do 2,1 GB i uległa uszkodzeniu - została odbudowana na silniku transakcyjnym.
Wideo poza serwer
Materiały wideo - 1 148 pozycji, 143 GB źródeł - przeniesione na wyspecjalizowany CDN, z odtwarzaniem i pobieraniem przez adresy podpisywane kryptograficznie. To naprawiło także lukę, przez którą pliki premium były dostępne bezpośrednio, z pominięciem kontroli abonamentu.
Szacowany koszt hostingu wideo na CDN wynosił 12-20 USD miesięcznie. Dotychczasowy serwer aplikacji i plików kosztował 400 USD miesięcznie. Na koniec opisanego etapu przejście na mniejszy serwer pozostawało w planie. Łączną oszczędność można potwierdzić dopiero po uwzględnieniu kosztu nowego serwera aplikacji i rzeczywistych opłat za CDN.
Luki, które przy okazji wyszły
- →SQL injection w publicznie dostępnym widoku
- →Zaplanowane i ukryte materiały widoczne przed datą publikacji - niewydany materiał trafił na stronę główną
- →Pliki deweloperskie i konfiguracyjne odpowiadające kodem 200 na produkcji
- →Panel administracyjny bez uwierzytelniania dwuskładnikowego
Wszystkie opisane luki zostały naprawione, a poprawki wdrożone.
Panel administracyjny
Rozproszone skrypty administracyjne zastąpione jednym panelem: zarządzanie materiałami i użytkownikami, promocja poziomów abonamentu, dziennik zdarzeń administracyjnych, przesyłanie wideo z możliwością wznowienia po przerwaniu transferu, uwierzytelnianie dwuskładnikowe.
Efekt
Na koniec opisanego etapu system działał na PHP 8.4 i miał środowisko lokalne, testy regresyjne oraz panel administracyjny. Filtr blokował bota odpowiadającego wcześniej za około 26% żądań. Wideo było już przeniesione na CDN, a obniżenie łącznych kosztów infrastruktury zależało od kolejnego kroku: zmniejszenia serwera aplikacji.
Żaden z tych efektów nie wymagał przepisania systemu od zera.
Potrzebujesz tego samego?
Porozmawiajmy o Twoim projekcie
Opisz krótko system i problem. Odpowiem, jakie informacje będą potrzebne do ustalenia zakresu i wyceny.
Porozmawiajmy
Opisz system i problem. Odpowiem, co można wstępnie ocenić i jakie informacje będą potrzebne do ustalenia zakresu i wyceny.
Telefon
+48 694 210 168Lokalizacja
Śląsk: Katowice, Mysłowice Małopolska: Kraków
Adres
ul. Imielińska 79 41-407 Imielin
NIP
PL6462602251