Dobre praktyki bezpieczeństwa w FiveM: zatrzymaj exploity i injectory
Zabezpiecz swój serwer FiveM przed exploitami. Sprawdzanie po stronie serwera, walidacja zdarzeń, kwestie escrow, wybór anticheata i najważniejsze praktyki bezpieczeństwa.
Agency Scripts
Założyciel i główny deweloper w Agency Scripts
Krajobraz zagrożeń w FiveM
Serwery FiveM stoją w obliczu ciągłych zagrożeń bezpieczeństwa ze strony cheaterów używających injectorów skryptów, executorów menu i exploitów protokołów. Narzędzia te pozwalają złośliwym graczom wywoływać eventy serwerowe ze sfałszowanymi danymi, spawnować nieautoryzowane byty, manipulować pozycją oraz zdrowiem i crashować grę innym graczom. Zrozumienie tych wektorów ataków to pierwszy krok do tworzenia odpornych skryptów. Główna zasada bezpieczeństwa FiveM jest prosta, ale kluczowa: nigdy nie ufaj klientowi. Każde dane pochodzące z eventu klienta powinny być traktowane jako potencjalnie złośliwe.
Walidacja po stronie serwera
Najważniejszą zasadą bezpieczeństwa jest wykonywanie całej krytycznej logiki po stronie serwera. Nigdy nie pozwól klientowi decydować o takich kwestiach jak przelewy pieniężne, tworzenie przedmiotów czy ukończenie pracy. Gdy event klienta wywołuje wpłatę pieniędzy, serwer powinien zweryfikować źródło, sprawdzić kwotę pod kątem rozsądnych limitów, upewnić się, że gracz jest w stanie umożliwiającym odebranie środków i zarejestrować transakcję. Jeśli którakolwiek weryfikacja się nie powiedzie, odrzuć akcję i opcjonalnie oznacz gracza do sprawdzenia przez administratora. Ten wzorzec dotyczy każdego systemu wpływającego na balans rozgrywki lub dane graczy.
Rate limiting eventów
Cheaterzy często spamują eventy, aby wykorzystać race conditions lub przeciążyć logikę walidacji. Wprowadź rate limiting w swoich handlerach eventów serwera, śledząc czas ostatniego wywołania dla każdego gracza i odrzucając eventy przychodzące zbyt często. Prosta tabela mapująca źródła graczy na znaczniki czasu wystarczy w większości przypadków. W przypadku kluczowych systemów, takich jak bankowość czy ekwipunek, dodaj cooldowny odpowiadające przewidywanej szybkości interakcji użytkownika. Jeśli gracz wywołuje event zakupu w sklepie pięćdziesiąt razy na sekundę, jest to jednoznaczny wskaźnik oszustwa.
Bezpieczne nazewnictwo eventów
Unikaj przewidywalnych nazw eventów, które cheaterzy mogą odgadnąć i wywołać. Zamiast nazywać swój event bank:deposit, użyj wzorca opartego na przestrzeni nazw z identyfikatorami wersji lub zaciemnionymi sufiksami. Chociaż security through obscurity nie jest pełnym rozwiązaniem, podnosi poprzeczkę dla zwykłych cheaterów skanujących typowe wzorce eventów. Połącz to z odpowiednią walidacją po stronie serwera, aby nawet w przypadku odkrycia nazwy eventu, jego wywołanie bez właściwego kontekstu skutkowało odrzuceniem, a nie exploitem.
Wzorce anti-cheat
Wdróż sprawdzanie poprawności stanu gracza po stronie serwera. Monitoruj teleportację poprzez śledzenie zmian pozycji gracza i oznaczanie niemożliwych prędkości poruszania się. Porównuj wartości obrażeń broni z oczekiwanymi zakresami, aby wykrywać modyfikatory obrażeń. Weryfikuj, czy zespawnowane pojazdy odpowiadają autoryzowanym transakcjom w salonach lub uprawnieniom od admina. Stwórz system detekcji, który nalicza punkty podejrzeń zamiast natychmiastowego banowania, ponieważ fałszywe trafienia zdarzają się podczas zwykłej rozgrywki. Powiadamiaj administratorów za pośrednictwem webhooków Discord lub powiadomień w grze, gdy gracze przekroczą progi podejrzeń.
Zabezpieczanie kodu źródłowego
Jeśli dystrybuujesz płatne skrypty, chroń swój kod po stronie serwera przed nieautoryzowanym dostępem. Używaj asset escrow na Tebex do szyfrowania plików skryptu, dzięki czemu będą czytelne tylko na autoryzowanych serwerach. Nigdy nie umieszczaj poufnej logiki w plikach po stronie klienta, ponieważ wszystko, co działa na kliencie, można wyodrębnić i odczytać bez względu na obfuskację. Przechowuj klucze API, adresy URL webhooków i dane uwierzytelniające do bazy danych w plikach konfiguracyjnych po stronie serwera, które nigdy nie są wysyłane do połączonych klientów. Regularnie audytuj swoje zasoby, aby upewnić się, że żadne poufne dane nie wyciekają przez skrypty klienta lub pliki NUI.