Dealing Damage with Remote (Sanity Checks?)

How do u do sanity checks for dealing damage with a remote due to moves being client based??
like how and wat should i check for? Since i use touched event and then on impact i fireserver with damage remote and the damage remote deals the damage i was thinking creating a tag somehow and the damage remote checks to see if player has certain tag with move name as the value to know if player should be damaged or not but i cant think of a way to create the tag for server to know without using fireserver since hacker could possibly fire tag remote creating a tag and fooling the damage remote

DamageRemote.OnServerEvent:Connect(function(Player,Target)
	for i,v in pairs(workspace:GetDescendants()) do -- Dealing Damage
		if v:IsA("Model") and v == Target then
			if v:FindFirstChild("Humanoid") then
				local hum = v:FindFirstChild("Humanoid")
				hum:TakeDamage(Amount)
			end
			--print(v.Name.." Has been damaged "..tostring(Amount))
		end
	end	
end)

Possible ways to make it more difficult for an exploiter to exploit your remote are:

Adding a debounce table, meaning you have a table in which there are players, when a player is on debounce, don’t do anything. Obviously remove their index whenever they leave the server.

Adding a magnitude check, if player is in 15 or less studs range, do damage.

Adding a check to see if the player is activating the remote way too many times a second.

Remember, everything you put in the variables when firing a remote, can and will be seen by an exploiter. So adding some form of serial or code won’t do you much good, and usually isn’t worth the hassle.
It does guarantee that unseasoned exploiters can’t just fire it, but there’s definitely a way to get around that serial.
These methods add obstacles for an exploiter, but don’t entirely nullify the chances of exploiters using them.
You could also make the tool not use any LocalScripts at all, and no Remotes at all. This makes your entire game a whole lot more difficult to exploit.

2 Likes