㈠ 如何限制客户端对WebService的访问
如何设置能限制某个IP某一时间段的访问次数是一个让人头疼的问题,特别面对恶意的ddos攻击的时候。其中CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直到宕机崩溃。
cc攻击一般就是使用有限的ip数对服务器频繁发送数据来达到攻击的目的,nginx可以通过HttpLimitReqMol和HttpLimitZoneMole配置来限制ip在同一时间段的访问次数来防cc攻击。
HttpLimitReqMol用来限制连单位时间内连接数的模块,使用limit_req_zone和limit_req指令配合使用来达到限制。一旦并发连接超过指定数量,就会返回503错误。
HttpLimitConnMol用来限制单个ip的并发连接数,使用limit_zone和limit_conn指令
这两个模块的区别前一个是对一段时间内的连接数限制,后者是对同一时刻的连接数限制
文章目录
1 HttpLimitReqMol 限制某一段时间内同一ip访问数实例
2 HttpLimitZoneMole 限制并发连接数实例
3 nginx白名单设置
HttpLimitReqMol 限制某一段时间内同一ip访问数实例
http{
...
#定义一个名为allips的limit_req_zone用来存储session,大小是10M内存,
#以$binary_remote_addr 为key,限制平均每秒的请求为20个,
#1M能存储16000个状态,rete的值必须为整数,
#如果限制两秒钟一个请求,可以设置成30r/m
limit_req_zone $binary_remote_addr zone=allips:10m rate=20r/s;
...
server{
...
location {
...
#限制每ip每秒不超过20个请求,漏桶数burst为5
#brust的意思就是,如果第1秒、2,3,4秒请求为19个,
#第5秒的请求为25个是被允许的。
#但是如果你第1秒就25个请求,第2秒超过20的请求返回503错误。
#nodelay,如果不设置该选项,严格使用平均速率限制请求数,
#第1秒25个请求时,5个请求放到第2秒执行,
#设置nodelay,25个请求将在第1秒执行。
limit_req zone=allips burst=5 nodelay;
...
}
...
}
...
㈡ java web 登录次数限制,该如何解决
java web 登录次数限制
一个用户登录系统,如果他一分钟之内连续登录 3 次,就让他在 15 分钟之内无法再登录,
------解决方案--------------------------------------------------------
将用户的每次登录都记入登录日志表
每次登录的时候,去查最近15 分钟内,是否存在连续3 次登录发生在一分钟之内的
------解决方案--------------------------------------------------------
呵呵,好方法啊.但这样会不会数据库服务器很累啊
------解决方案--------------------------------------------------------引用:
将用户的每次登录都记入登录日志表
每次登录的时候,去查最近15 分钟内,是否存在连续3 次登录发生在一分钟之内的
这是个方法. 不过总查数据库应该是有些不妥的.!
不过暂时还想不到更好的办法.! 再去想想
------解决方案--------------------------------------------------------
如果以后不需要日志查询和审计,可以使用缓存而不是数据库,把每次登陆的信息(登陆名、
时间) 这些放入缓存。然后每次登陆时查询缓存就可以了。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
如果你不想用数据库的形式的话,用session 存下试试。
先声明下,我没用过:
在用户登录时候,如果成功不记录session,如果登录不成功,记录下session +1;
到第三次,就不让登录了。session 的有效期设置为15 分钟。.setMaxInactiveInterval(15
分钟);当然,感觉这样有个弊端,session 的丢失是根据客户端的浏览器关闭来的。
㈢ web发一次请求与数据库交互多少次合适,如果一次请求中需要交互5次以上,对性能影响多大
单纯从交互对系统性能影响的话,肯定是次数越少越好。
从数据库查询方面,如果多次查询的结果与一次查询的结果一样,一次查询的效率正常情况下会高于多次查询。
现在都使用连接池技术,建立数据库连接,释放连接方面的开销不是很大。
对于你说的一次请求中需要与数据库交互5次以上的情况,我觉得对性能影响挺大的。 web是并发的,如果一个请求就交互这么多,多个请求时连接池就不够用了。
感觉你说的这种情况挺另类。
只从你问题的字面上理解,没法告诉你影响有多大。 性能方面的东西,单纯分析是没有太大作用的。需要真实的数据。
希望能够帮到你
㈣ 高性能WEB开发 为什么要减少请求数,如何减少请求数
减少请求一般是为了提高页面渲染速度吧,浏览器支持的并发连接有限。
为了减少请求可以合并文件,server端的文件合并解决方案可以用jawr。
也可以考虑异步加载文件 或者 按需加载文件来减少渲染阶段的请求
㈤ 关于JAVA的WEB开发,想在页面中实现在一段时间内限制同一个IP登陆失败次数过多
给出在doXX(get或者post)方法里的一点,其他自己完善。
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {
int resc = 6 ;//定义次数,比如六次
HttpSession sess = request.getSession(true);//获取一个session
//这里使用伪码,假设你已经有了验证是否登录失败的方法,假设这个方法名字为 validate(),返回类型为boolean,为true则为登录成功
if(validate()){
//继续你的程序流程。。
}else{//登录失败了。。。
String add = request.getRemoteAddr();//获取当前用户的IP
Integer times = (Integer) sess.getAttribute(add);
if(times == null ){//当前第一次登陆
sess.setAttribute(add, new Integer(1));//设置为登录了一次
}else{
times = times + 1;//这样做不太好,但是也有效。严谨点,你可以取出times的intValue,然后再操作
if(times >= resc){//超过次数限制。。。
//执行你需要的程序。。。
}else{//没有超过次数,继续。。。
sess.setAttribute(add,times);
}
}
}
}
㈥ Java web怎么限制同一个ip(或mac地址)访问网站,查询资源次数的
获取并保存IP,每次查询前,遍历IP,若相等,跳过查询,提示次数受限!
㈦ 网页有浏览次数限制 怎么破解
网页次数的限制一般都是IP限制,你可以看完一遍后,直接点击文件->另存为,就是把整个网页保存下来,你再看就没有限制啦,因为是脱机模式啦
还有一种方法对技术的要求比较高,那就是设置代理服务器,这样,就可以多次浏览啦,希望对你有用,谢谢
㈧ web项目用拦截器对IP进行频率限制,1秒最多访问5次
可以使用拦截器,获得客户端IP,然后session缓存计数,超过的就直接拦截。