CanCaptchas (Automatically prevent bots)

CanCaptcha prevent bots by requiring captchas on alt accounts or suspicious accounts.

the captcha system is complete you cannot move or do any action in the game aswell as speak without solving the captcha first

to prevent bots the captcha is only sent to accounts that are suspicious for example:

Account age, badges, friends, followers, passes, inventory, rap, verified email, only wearing free items, default bacon account

i will make these settings adjustable in the future.

along with the option to teleport these accounts to maybe another server and have them complete the captchas there to ensure security

of course this only happens to bots and suspected accounts and only happens upon joining

the current captcha system currently has four methods for captchas Addition - Subtraction - Multiplication - and Division.
iā€™m going to add image verification soon as i know that is more robust.

before any of you go ahead and talk about vulnerabilities the client has no idea what the answer is to the captcha they only know the prompt and everytime they get it wrong it regenerates. i understand the math is insecure thats why im adding image captchas soon

  • please note the suspicious account filter is currently not enabled

1 Like

I thought this was interesting so I remade, if anyone wants the code here it is

server:

function captcha(player)
	local chosenOperation = math.random(1,2)
	local randomFirstNumber = math.random(1,5)
	local randomSecondNumber = math.random(1,5)

	
	local await = player.PlayerGui:WaitForChild("Captcha")
	player.PlayerGui.Captcha.Enabled = true

	if chosenOperation == 1 then
		player.PlayerGui.Captcha.Frame.Question.Text = randomFirstNumber.."+"..randomSecondNumber
		player.PlayerGui.Captcha.Frame.Confirm.MouseButton1Click:Connect(function()

			if game.ReplicatedStorage.GetEntery:InvokeClient(player) == randomFirstNumber + randomSecondNumber then
				print('Correct')
				player.PlayerGui.Captcha.Enabled = false
			else
				player:Kick()
			end

		end)
	elseif chosenOperation == 2 then
		
		if randomSecondNumber > randomFirstNumber then
			repeat
				randomFirstNumber = math.random(1,5)
				randomSecondNumber = math.random(1,5)
			until randomSecondNumber <= randomFirstNumber
		end
		
		player.PlayerGui.Captcha.Frame.Question.Text = randomFirstNumber.."-"..randomSecondNumber
		player.PlayerGui.Captcha.Frame.Confirm.MouseButton1Click:Connect(function()

			if game.ReplicatedStorage.GetEntery:InvokeClient(player) == randomFirstNumber - randomSecondNumber then
				print('Correct')
				player.PlayerGui.Captcha.Enabled = false
			else
				player:Kick()
			end

		end)
	end
end

game.Players.PlayerAdded:Connect(function(player)
	task.spawn(captcha, player)
end)

client:

game.ReplicatedStorage:WaitForChild("GetEntery").OnClientInvoke = function()
	return tonumber(script.Parent.PlrAnswer.Text)
end
1 Like

ill be releasing a polished version of this when i added image captchas and then u can choose between math or image captchas

1 Like