Skocz do zawartości

Zabezpieczenie autoryzacji do listy znajomych przed flood exploitem

Opublikowano

image.png.a144663d4007d16872d3413c4a1a8bf3.png

 

Cześć,

 

Dziś zajmiemy się zabezpieczeniem serwera przed atakiem typu flood, który może powodować rozłączenia graczy. Atak ten wykorzystuje błąd w uwierzytelnianiu gracza podczas dodawania do listy przyjaciół przez funkcję messenger_auth. Naszym celem jest zapewnienie stabilności serwera i ochrona przed nadmiernym zalewaniem pakietami, które może negatywnie wpłynąć na doświadczenie graczy.

 

Implementacja:

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

 

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień

Jeśli nie masz tu żadnych zmian możesz zaktualizować cały kod.

🔐 Ukryta Treść 🔐

 

 

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

 

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

♻️ Zamień

🔐 Ukryta Treść 🔐

 

🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 ♻️ Zamień

🔐 Ukryta Treść 🔐

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

 Dodaj 

🔐 Ukryta Treść 🔐

 

 

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

 

 🔍 Szukaj

🔐 Ukryta Treść 🔐

 

  ♻️ Zamień

🔐 Ukryta Treść 🔐

 

Featured Replies

Opublikowano

Bardzo Ci dziękuję za pomoc!

 

Opublikowano

Bardzo Ci dziękuję za tego fixa 😄

 

Opublikowano

Dzięki

Opublikowano

Dziekuje

  • 2 tygodnie później...
Opublikowano

Dzięki

  • 1 miesiąc temu...
Opublikowano

przydatne 🙂

wrzucam rozwiązanie też

Dla starszych wersji:

 

ACMD(do_messenger_auth)
{
	if (ch->GetArena())
	{
		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("´ë·ĂŔ忡Ľ­ »çżëÇĎ˝Ç Ľö ľř˝Ŕ´Ď´Ů."));
		return;
	}

	char firstArgument[256], secondArgument[256];
	two_arguments(argument, firstArgument, sizeof(firstArgument), secondArgument, sizeof(secondArgument));

	if (!*firstArgument || !*secondArgument)
	{
		return;
	}

	bool isFriendRequestDenied = std::tolower(firstArgument[0]) != 'y';
	bool isFriendRequestProcessed = MessengerManager::instance().AuthToAdd(ch->GetName(), secondArgument, isFriendRequestDenied) != 0;

	if (isFriendRequestProcessed && isFriendRequestDenied)
	{
		CHARACTER* targetCharacter = CHARACTER_MANAGER::instance().FindPC(secondArgument);
		if (targetCharacter)
		{
			targetCharacter->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s ´ÔŔ¸·Î şÎĹÍ ÄŁ±¸ µî·ĎŔ» °ĹşÎ ´çÇß˝Ŕ´Ď´Ů."), ch->GetName());
		}
	}
}

 

Edytowane przez Denis

  • 1 miesiąc 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...