Jör*_*rer 12 java throttling login
我想实现一种有效的机制来限制我的Java Web应用程序中的登录尝试,以防止对用户帐户的暴力攻击.
Simon Willison 在Python中为Django展示了一个实现:这并没有真正帮助我,因为我不能使用memcached和Django.
从头开始移植他的想法似乎也不是很好 - 我不想重新发明轮子.
我发现了一个Java实现,虽然它似乎相当简单:它只是在15分钟后清除所有条目而不是LRU缓存.
EHCache可能是memcached的替代品,但我没有任何经验,如果有更好的替代方案,我不想真正引入另一种技术.
那么,什么是在Java中实现登录限制的好方法?
我想即使是EHCache也会用凝固汽油弹炸死一只苍蝇.问题很简单,实施也是如此.
我建议在顶层使用servlet过滤器,以便尽可能少地进行处理.
创建一个类来存储以下内容:
现在,代码在sunchronized块中很简单:
if userid not in attemptMap:
attemptMap.add ( userid, new attemptItem ( userid, 1, now ) )
else
tmp = attemptMap.get ( userid )
if (acquire lock for tmp) :
if tmp.time + 30 > now :
tmp.count = 0
tmp.time = now
tmp.count++
if tmp.count > 3 :
error=true
release lock for tmp
else : error=true
Run Code Online (Sandbox Code Playgroud)
这就是人(只要代码是同步的).
我刚刚完成了由方面安全性运行的网络安全课程,其中提出的建议之一是在任何登录尝试中都包含自然延迟 - 理论是 1 或 2 秒的延迟对于真正的延迟来说并不算什么。 -user 但会严重阻碍暴力攻击。
归档时间: |
|
查看次数: |
5274 次 |
最近记录: |