Skocz do zawartości

Zabezpieczenie funkcji dodawania komentarzy w Gildii przed nadużyciami

Featured Replies

Opublikowano

image.png.a144663d4007d16872d3413c4a1a8bf3.png

 

Cześć,

 

System komentarzy w Gildii jest podatny na nadużycia. Konkretnie, istnieje możliwość tzw. "floodowania" serwera poprzez wysyłanie nadmiernej liczby nowych komentarzy. To zagrożenie może przybrać formę zautomatyzowanego ataku za pomocą specjalnie spreparowanego skryptu, który wykorzystuje lukę w funkcjonalności dodawania komentarzy. Rozwiążemy ten problem poprzez wprowadzenie czasowego ograniczenia wynoszącego 1 minutę przed dodaniem kolejnego komentarza.

 

Prezentacja rozwiązania:

image.png.c17879fc841cf921fabafed6f23d4674.png

 

Implementacja:

📂 Lokalizacja pliku: 'game -> guild.cpp'

 

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj:

🔐 Ukryta Treść 🔐

 

 

📂 Lokalizacja pliku: 'game -> guild.h'

 

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj

🔐 Ukryta Treść 🔐

 

 

 📂 Lokalizacja pliku: 'game -> stdafx.h'

 

  Dodaj (jeśli nie masz)

🔐 Ukryta Treść 🔐

 

 

 📂 Lokalizacja pliku: 'share -> locale -> poland -> locale_string.txt'

 

 Dodaj:

🔐 Ukryta Treść 🔐

 

Kompatybilność:

Jeśli masz zaimplementowaną tą poprawkę od wysyłania pustych znaków

To warunek powinien być przed kontrolą czasu, aby po otrzymaniu komunikatu o pustej wiadomości nie dodawało nam limitu czasowego. 

Spoiler
🔐 Ukryta Treść 🔐

 

Opublikowano
guild.cpp:1020:3: error: use of undeclared identifier 'character'
                character->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("NOTIFICATION_ADD_COMMEND_GUILD_FLOOD_PROTECTION_%lld"), remainingTime);
                ^

 

Opublikowano

Jest dużo prostszy sposób i duzo bezpieczniejszy. Nie bez powodu zrobili PulseManager.

 

if (!PulseManager::Instance().IncreaseClock(ch->GetPlayerID(), ePulse::GuildComment, std::chrono::milliseconds(1500))) {
		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Odczekaj: %.2f"), PULSEMANAGER_CLOCK_TO_SEC2(ch->GetPlayerID(), ePulse::GuildComment));
		return;
	}

 

Opublikowano
  • Autor

To czekamy na publikację tego modułu może się przydać. W każdym razie nie ma żadnej różnicy w jaki sposób to rozwiążemy efekt jest taki sam. 

Ja nie mam takiego modułu korzystam z brancha mailine_released więc zrobiłem to w ten sposób. Tworzę uniwersalne bug fixy, które będą kompatybilne z oryginalnym źródłem.

  • 2 miesiące temu...

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...