Ajax-防止页面恶意刷新

发布于 2016-12-27 02:45:11 字数 196 浏览 1320 评论 5

之前我的做法是,一次URL请求之后,记录当前时间,但它进行第二次请求时,把此时的时间和第一次时间作比对,如果时间间隔小于我设定的间隔,就不许他继续操作。

但这种做法有一个问题: 我触发一个请求,可能这个请求是一个ajax,所以我会同时触发2个请求,这样的时间间隔肯定小于我设定的间隔,这样第二个ajax请求可能不会被执行。

求改进方法。。。。。。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

清晨说ぺ晚安 2017-09-25 19:58:03

防止恶意刷页面:
要求在页面间传递一个验证字符串,在生成页面的时候随机产生一个字符串,做为一个必须参数在所有连接中传递。同时将这个字符串保存在session中。
点连接或者表单进入页面后,判断session中的验证码是不是与用户提交的相同,如果相同,则处理,不相同则认为是重复刷新。
在处理完成后将重新生成一个验证码,用于新页面的生成

灵芸 2017-08-07 12:55:03

最简单的方法,ajax提交的表单内容添加一项,表明是ajax的请求,这时不做时间对比,否则就是真正的页面刷新,进行时间对比,这样不行吗?

夜无邪 2017-07-07 22:56:02

应该是要对某个用户的频繁访问做控制吧,Apache下有一个模块mod_evasive,可以实现这个功能

灵芸 2017-07-04 02:49:23

页面重复刷新,是不是get请求?
如果是的话,那么直接用get和post区分刷新和表单提交就可以了,你只需要限制get请求就ok了。

夜无邪 2017-03-13 17:26:05

其实你可以通过一段时间内的访问次数还限制恶意刷新行为,我给你个例子:

<?php

/**
* 将一些请求数据放到CACHE,判断请求次数,如果超过请求次数就暂停
*
* @param object $ca Mcmcache对象
* @param string $key 键值名称
* @param int $expire cache过期时间
* @param int $num 次数
* @return boolean
*/
function isAttack($ca,$key,$expire=3600,$num=10)
{
$loadnum = $ca->Get($key);

if(empty($loadnum))
{
$loadnum = 1;
$ca->Set($key,$loadnum,false,$expire);
}

$ca->Inc($key,1);

if(!empty($loadnum) && is_numeric($loadnum))
{
if(intval($loadnum)>intval($num))
{
return false;
}
}

return true;
}

$cache = Cache::Instance();
$isattack = isAttack($cache,"ACK_DENY_".md5(getClientIP()),600,100);

if(!$isattack)
{
header("HTTP/1.1 404 Not Found");
exit;
}

?>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文