Skocz do zawartości

Zabezpieczenie funkcji dodawania komentarzy w Gildii przed nadużyciami

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ść 🔐

 

Featured Replies

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
  • Autor

Zaktualizowałem temat, zmieniałem sobie trochę nazwy argumentów i zapomniałem zmienić w temacie na oryginalne. 

Opublikowano

Serdecznie dziękuję za udostępnienie fix. 💪

 

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

W oryginalnym źródle nie ma takiego modułu. 

Opublikowano

Oryginalne zrodlo nie ma miliona rzeczy ktore sa obecnie standardem

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.

Opublikowano

Dziekuje

  • 2 miesiące temu...
Opublikowano
  • Premium

thx

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...