重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
public class Counter {
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计制作、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的岚县网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
private int count;
// 每访问一次,计数器自加一
public int getCount() {
return ++count;
}
public void setCount(int count) {
this.count = count;
}
}
%-- 定义一个 session 范围内的计数器 记录个人访问信息 --%
jsp:useBean id="personCount" class="com.helloweenvsfei.jspweb.bean.Counter" scope="session" /
%-- 定义一个 application 范围内的计数器 记录所有人的访问信息 --%
jsp:useBean id="totalCount" class="com.helloweenvsfei.jspweb.bean.Counter" scope="application" /
div align="center"
form action="method.jsp" method="get"
fieldset style='width: 300'
legend计数器/legend
table align="center" width="400"
tr
td width=150 align="right" style="font-weight:bold; "您的访问次数:/td
td
%-- 获取个人的 访问次数 --%
jsp:getProperty name="personCount" property="count" / 次
/td
/tr
tr
td width=150 align="right" style="font-weight:bold; "总共的访问次数:/td
td
%-- 获取所有人的 访问次数 --%
jsp:getProperty name="totalCount" property="count" / 次
/td
/tr
/table
/fieldset
/form
/div
希望你能帮到你
为什么会有人要刷接口?
1、牟利
黄牛在 12306 网上抢票再倒卖。
2、恶意攻击竞争对手
如短信接口被请求一次,会触发几分钱的运营商费用,当量级大了也很可观。
3、压测
用 apache bench 做压力测试。
4、当程序员无聊的时候
什么是刷接口的"刷"字?
1、次数
多
2、频率
频繁,可能 1 秒上千次
3、用户身份难以识别
可能会在刷的过程中随时换浏览器或者 ip
判断接口是否是恶意?
根据用户粒度,如果该用户符合上面提到的“刷”的概念,就是恶意的。
用户粒度如何划分?
1、当前网页
优点:无
缺点:没有任何意义,一刷新页面用户的身份就变了
2、session
优点:伪造成本一般(可以理解成一个浏览器对应了一个用户)
缺点:当用户手动清除 cookie 的时候即失效
3、ip
优点:伪造成本高
缺点:要考虑一个公司、一个小区的人一般会共享一个 ip,所以适当的要放宽对单一 ip 的请求限制
ip 信息是存在请求头里的,而 https 对请求本身做了加密,可以防止 ip 信息被伪造或篡改。所以推荐服务器采用 https 传输。
当知道接口是恶意请求时,我们该怎么做?
一、直接拒绝访问
优点:简单粗暴
缺点:简单粗暴
二、返回“操作频繁”的错误提示
优点:提示友好
缺点:会把确实是操作比较频繁的真实用户拦截
三、验证码
1、图形

2、滑块

3、找不同

优点:精准识别请求是真人还是机器发出的,二次筛选出真正的用户
缺点:不够人性化,用户操作时间长、体验差
4、限制ip
客户端请求的时候 , 把ip记录下来,每次访问这个ip访问次数+1,如果查过制定次数,把这个ip拉黑
实例:
安全问题是长期的和攻击者斗智斗勇的问题,没有一劳永逸的解决方案,不断交锋,不断成长
你指的android吧?
TelephonyManager tManager = (TelephonyManager)myActivity.getSystemService(Context.TELEPHONY_SERVICE);
String uid = tManager.getDeviceId();
DIV class="h"
%-- 记录网站访问次数 --%
%
Integer counter = (Integer)application.getAttribute("counter"); //先从application里面获取计数器的key的值
if(counter==null){
//如果该值为null,说明第一次访问
application.setAttribute("counter",1);
counter=(Integer)application.getAttribute("counter");
}else {
//如果该值不为空,取出来进行累加
int i = counter.intValue();
i++;
application.setAttribute("counter",i);//累加后再放进去
}
%
% User user =(User)session.getAttribute("users"); %
%="欢迎"+user.getName() % |您是第%=counter.intValue()%位访客
/DIV
谢谢~