whitelist neon because vac ban, prevent clients from getting kicked through spoofing, kick clients with invalid steamid
This commit is contained in:
		
							parent
							
								
									c008c39a86
								
							
						
					
					
						commit
						0d78e4f497
					
				| @ -10,6 +10,7 @@ | ||||
| ConVar g_hCvar_BlockSpoof; | ||||
| ConVar g_hCvar_BlockAdmin; | ||||
| ConVar g_hCvar_BlockVoice; | ||||
| ConVar g_hCvar_AuthenticationTime; | ||||
| 
 | ||||
| /* DATABASE */ | ||||
| Database g_hDatabase; | ||||
| @ -25,7 +26,7 @@ public Plugin myinfo = | ||||
| 	name         = "PlayerManager: Connect", | ||||
| 	author       = "zaCade + Neon", | ||||
| 	description  = "Manage clients, denying admin access, ect.", | ||||
| 	version      = "2.0.0" | ||||
| 	version      = "2.1.0" | ||||
| }; | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| @ -51,6 +52,7 @@ public void OnPluginStart() | ||||
| 	g_hCvar_BlockSpoof = CreateConVar("sm_manager_block_spoof", "1", "Kick unauthenticated people that join with known steamids.", FCVAR_NONE, true, 0.0, true, 1.0); | ||||
| 	g_hCvar_BlockAdmin = CreateConVar("sm_manager_block_admin", "1", "Should unauthenticated people be blocked from admin?",       FCVAR_NONE, true, 0.0, true, 1.0); | ||||
| 	g_hCvar_BlockVoice = CreateConVar("sm_manager_block_voice", "1", "Should unauthenticated people be blocked from voice?",       FCVAR_NONE, true, 0.0, true, 1.0); | ||||
| 	g_hCvar_AuthenticationTime = CreateConVar("sm_manager_authentication_time", "15", "Time in seconds after which a client needs to be assigned to a SteamID", FCVAR_NONE, true, 1.0); | ||||
| 
 | ||||
| 	AddMultiTargetFilter("@steam", Filter_Steam, "Steam Players", false); | ||||
| 	AddMultiTargetFilter("@nosteam", Filter_NoSteam, "No-Steam Players", false); | ||||
| @ -83,6 +85,17 @@ public void OnPluginEnd() | ||||
| 	RemoveMultiTargetFilter("@nosteam", Filter_NoSteam); | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public bool SteamClientAuthenticatedEx(const char[] sAuthID) | ||||
| { | ||||
| 	if (StrEqual(sAuthID, "STEAM_0:1:32247009")) | ||||
| 		return true; | ||||
| 
 | ||||
| 	return SteamClientAuthenticated(sAuthID); | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| @ -110,6 +123,41 @@ public Action Command_GetAuth(int client, int args) | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public Action Command_DisplaySteamStats(int client, int args) | ||||
| { | ||||
| 	char aBuf[1024]; | ||||
| 	char aBuf2[MAX_NAME_LENGTH]; | ||||
| 
 | ||||
| 	for(int i = 1; i <= MaxClients; i++) | ||||
| 	{ | ||||
| 		if(IsClientInGame(i) && !IsFakeClient(i)) | ||||
| 		{ | ||||
| 			char sAuthID[32]; | ||||
| 			GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID), false); | ||||
| 
 | ||||
| 			if(!SteamClientAuthenticatedEx(sAuthID)) | ||||
| 			{ | ||||
| 				GetClientName(i, aBuf2, sizeof(aBuf2)); | ||||
| 				StrCat(aBuf, sizeof(aBuf), aBuf2); | ||||
| 				StrCat(aBuf, sizeof(aBuf), ", "); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if(strlen(aBuf)) | ||||
| 	{ | ||||
| 		aBuf[strlen(aBuf) - 2] = 0; | ||||
| 		ReplyToCommand(client, "[SM] No-Steam clients online: %s", aBuf); | ||||
| 	} | ||||
| 	else | ||||
| 		ReplyToCommand(client, "[SM] No-Steam clients online: none"); | ||||
| 
 | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| @ -134,41 +182,6 @@ public Action Command_DebugNoSteam(int client, int args) | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public Action Command_DisplaySteamStats(int client, int args) | ||||
| { | ||||
| 	char aBuf[1024]; | ||||
| 	char aBuf2[MAX_NAME_LENGTH]; | ||||
| 
 | ||||
| 	for(int i = 1; i <= MaxClients; i++) | ||||
| 	{ | ||||
| 		if(IsClientInGame(i) && !IsFakeClient(i)) | ||||
| 		{ | ||||
| 			char sAuthID[32]; | ||||
| 			GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID), false); | ||||
| 
 | ||||
| 			if(!SteamClientAuthenticated(sAuthID)) | ||||
| 			{ | ||||
| 				GetClientName(i, aBuf2, sizeof(aBuf2)); | ||||
| 				StrCat(aBuf, sizeof(aBuf), aBuf2); | ||||
| 				StrCat(aBuf, sizeof(aBuf), ", "); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if(strlen(aBuf)) | ||||
| 	{ | ||||
| 		aBuf[strlen(aBuf) - 2] = 0; | ||||
| 		ReplyToCommand(client, "[SM] No-Steam clients online: %s", aBuf); | ||||
| 	} | ||||
| 	else | ||||
| 		ReplyToCommand(client, "[SM] No-Steam clients online: none"); | ||||
| 
 | ||||
| 	return Plugin_Handled; | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| @ -181,7 +194,7 @@ public bool Filter_Steam(const char[] sPattern, Handle hClients) | ||||
| 			char sAuthID[32]; | ||||
| 			GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID), false); | ||||
| 
 | ||||
| 			if(SteamClientAuthenticated(sAuthID)) | ||||
| 			if(SteamClientAuthenticatedEx(sAuthID)) | ||||
| 				PushArrayCell(hClients, i); | ||||
| 		} | ||||
| 	} | ||||
| @ -200,13 +213,54 @@ public bool Filter_NoSteam(const char[] sPattern, Handle hClients) | ||||
| 			char sAuthID[32]; | ||||
| 			GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID), false); | ||||
| 
 | ||||
| 			if(!SteamClientAuthenticated(sAuthID)) | ||||
| 			if(!SteamClientAuthenticatedEx(sAuthID)) | ||||
| 				PushArrayCell(hClients, i); | ||||
| 		} | ||||
| 	} | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public EConnect OnClientPreConnectEx(const char[] sName, char sPassword[255], const char[] sIP, const char[] sSteam32ID, char sRejectReason[255]) | ||||
| { | ||||
| 	char sAuthID[32]; | ||||
| 	for(int client = 1; client <= MaxClients; client++) | ||||
| 	{ | ||||
| 		if(IsClientInGame(client) && !IsFakeClient(client)) | ||||
| 		{ | ||||
| 			GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID), false); | ||||
| 
 | ||||
| 			if(StrEqual(sAuthID, sSteam32ID, false)) | ||||
| 			{ | ||||
| 				char sClientIP[32]; | ||||
| 				GetClientIP(client, sClientIP, sizeof(sClientIP)); | ||||
| 				if(IsClientTimingOut(client) || StrEqual(sIP, sClientIP, false)) | ||||
| 				{ | ||||
| 					KickClientEx(client, "Timed out"); | ||||
| 					return k_OnClientPreConnectEx_Accept; | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					LogAction(client, -1, "\"%L\" got protected from getting kicked by a new connection. Possible spoofing attempt from IP: %s", client, sIP); | ||||
| 					Format(sRejectReason, sizeof(sRejectReason), "SteamID already on the server"); | ||||
| 					return k_OnClientPreConnectEx_Reject; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return k_OnClientPreConnectEx_Accept; | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public void OnClientPutInServer(int client) | ||||
| { | ||||
|     CreateTimer(g_hCvar_AuthenticationTime.FloatValue, CheckAuth, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| @ -238,7 +292,7 @@ public Action OnClientPreAdminCheck(int client) | ||||
| 	char sAuthID[32]; | ||||
| 	GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID), false); | ||||
| 
 | ||||
| 	if(!SteamClientAuthenticated(sAuthID)) | ||||
| 	if(!SteamClientAuthenticatedEx(sAuthID)) | ||||
| 	{ | ||||
| 		LogMessage("%L was not authenticated with steam, denying admin.", client); | ||||
| 		NotifyPostAdminCheck(client); | ||||
| @ -261,7 +315,7 @@ public void OnClientPostAdminCheck(int client) | ||||
| 	char sAuthID[32]; | ||||
| 	GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID), false); | ||||
| 
 | ||||
| 	if(!SteamClientAuthenticated(sAuthID)) | ||||
| 	if(!SteamClientAuthenticatedEx(sAuthID)) | ||||
| 	{ | ||||
| 		LogMessage("%L was not authenticated with steam, muting client.", client); | ||||
| 		BaseComm_SetClientMute(client, true); | ||||
| @ -269,6 +323,24 @@ public void OnClientPostAdminCheck(int client) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| public Action CheckAuth(Handle timer, int data) | ||||
| { | ||||
| 	int client; | ||||
| 	if ((client = GetClientFromSerial(data)) == 0) | ||||
| 		return Plugin_Stop; | ||||
| 
 | ||||
| 	char sAuthID[32]; | ||||
| 	if(!GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID), true)) | ||||
| 	{ | ||||
| 		LogMessage("%L could not be assigned to a SteamID, kicking client.", client); | ||||
| 		KickClient(client, "Invalid STEAMID"); | ||||
| 	} | ||||
| 	return Plugin_Stop; | ||||
| } | ||||
| 
 | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| // Purpose: | ||||
| //---------------------------------------------------------------------------------------------------- | ||||
| @ -310,7 +382,7 @@ public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[] | ||||
| 	GetClientIP(client, sAddress, sizeof(sAddress)); | ||||
| 
 | ||||
| 	char sConnectionType[32]; | ||||
| 	if(SteamClientAuthenticated(sAuthID)) | ||||
| 	if(SteamClientAuthenticatedEx(sAuthID)) | ||||
| 		sConnectionType = "SteamLegit"; | ||||
| 	else | ||||
| 		sConnectionType = "NoAuth"; | ||||
| @ -329,7 +401,7 @@ public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[] | ||||
| 
 | ||||
| 		delete results; | ||||
| 
 | ||||
| 		if(!SteamClientAuthenticated(sAuthID)) | ||||
| 		if(!SteamClientAuthenticatedEx(sAuthID)) | ||||
| 		{ | ||||
| 			if(!StrEqual(sConnectionType, sResultConnectionType, false) && StrEqual(sResultConnectionType, "SteamLegit", false)) | ||||
| 			{ | ||||
| @ -376,7 +448,7 @@ public int Native_IsPlayerSteam(Handle hPlugin, int numParams) | ||||
| 	char sAuthID[32]; | ||||
| 	GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID), false); | ||||
| 
 | ||||
| 	if(SteamClientAuthenticated(sAuthID)) | ||||
| 	if(SteamClientAuthenticatedEx(sAuthID)) | ||||
| 		return true; | ||||
| 
 | ||||
| 	return false; | ||||
| @ -406,7 +478,7 @@ public int Native_GetPlayerType(Handle hPlugin, int numParams) | ||||
| 	char sAuthID[32]; | ||||
| 	GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID), false); | ||||
| 
 | ||||
| 	if(SteamClientAuthenticated(sAuthID)) | ||||
| 	if(SteamClientAuthenticatedEx(sAuthID)) | ||||
| 		return !SetNativeString(2, "SteamLegit", length + 1); | ||||
| 
 | ||||
| 	return !SetNativeString(2, "NoAuth", length + 1); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user