(实现细节)访问某些有密码的资源,输错N次后就需要验证码解决方法

(实现细节)访问某些有密码的资源,输错N次后就需要验证码
场景:以某度网盘为例,有些分享的资源需要访问密码,当输错几次后,再次输入就需要额外再输入验证码。
目的:此举是为了防止有人恶意的枚举密码,如果没有任何限制,使用工具来穷举破解密码是迟早的事。
问题:验证码如何只针对多次输错密码的人,但不要影响其他(访问此资源的)人。 
此问题的关键是如何跟踪和识别用户,网上有人说将错误次数存放cookie或者session里,每次访问时候进行判断,超过一定次数就需要验证码。 但这个思路是有问题的,cookie是可以被删除的,session也是依赖于cookie, 而且很多工具直接访问url时候,每次都是新的session.

所以,是否还有其他好的办法。

------解决思路----------------------
简单看了一下楼主的需求,我觉的可以这样做。在访问资源的时候,请求一下校验的方法。这个方法里要处理的就是用户的ip地址或者mac地址,目的是通过这个来判断是不是同一个用户输入超出了最大访问次数。可以用map存储数据,就可以用ip当key,value默认为0。当同一个用户输入密码错误的时候,更新这个key的value。,当value大于最大限制的时候,你就提示输入验证码。如果此时另一个用户访问的时候,由于你记录的是通过ip或者mac记录的。所以这个新访问用户的value是0.所以不会对这个用户产生任何影响。这样就可以满足楼主的需求了。
------解决思路----------------------
就业务开发来讲,个人倾向cookies的做法,判断逻辑在客户端操作。

很显然LZ更倾向于保护用户密码,那么就记录用户名用于短时间锁定,因为登陆肯定要传用户名

另外,我记得IP和MAC都可以被伪造。
------解决思路----------------------
能不能在数据库弄1列记住当前尝试登陆次数,成功清0,不成功自增,达到限定次数禁止登陆15分钟。当然还有一些输着输着不输了,定时清0实现一下
------解决思路----------------------
根据IP是可以的,如果改了IP,那么应答就会发往这个错误的IP地址。他也得不到想要的结果,没有什么用。
当然这肯定不是没有安全问题的,要破解这个也很麻烦。 要根据业务对安全的要求来判断了。
更高要求系统可以使用第二套后台系统来加强,不必只在此一处。