So the basic answer to my title is Use Captchas. I agree, they are great and I am using google's recaptcha newest one. I wanted to state that before I explain anything else so that we are on the same page.
I have been thinking about user experience and basically if I were to secure every form post on my website I'd have to stick a captcha on every page. That is not very user friendly. Its annoying and people would hate to do it. However, I've noticed functionality on few websites such as Steam where it will allow you to log in few times and if you get it wrong lets say 3 times then it will start showing a captcha for you.
I like this approach, you get 3 attempts, if you get them wrong then you will start needing to prove you are human. Furthermore I wish to completely block you after lets say 10 attempts from even visiting my website. Unfortunately I do not know how to go about achieving this.
My question is this:
How do I keep track of your attempts to lets say log in and then throw you a captcha after 3 attempts and completely cut you off after 10 attempts? I have thought about cookies but that can be cleared out. Would I have to do something with external IP's? Would this be too much overhead? Every time you submit any form on the site (errors or not) I'd write to database to your counter and add 1, seems like its too much. Is there a better way? How would you do this?
I am developing in ASP.NET MVC5 Framework with EF6 - C#.
EDIT:
I saw a vote for too broad, I'm not really sure how I can be clearer but here is my attempt:
What is the best way to track user's attempts at submitting forms when they are not logged in?
EDIT 2: The question that was linked below as possible duplicate only addresses showing a captcha after a certain username hits a threshold, I don't like this approach. I wish to limit more towards a single attacker and blocking them off not the legit user who will try to login afterwards. That question also doesn't address how to block that user from loading the site after too many attempts.