如果用户未能多次验证(15~20),如何阻止用户IP地址达到规定的时间限制。这是为了防止暴力攻击而实施的。
我必须在yii中实现这一点。我尝试在控制器中使用php头函数实现,但它没有成功。另外,如何设置时间限制,如何设置块的时间限制?
答案 0 :(得分:1)
我不知道yii,我只是给出基本的逻辑。保存数据库中访问者的IP地址,以及访问该站点的时间。如果此IP地址访问次数超过20次,则重定向到某个错误页面。实施例
$ipaddress=$_SERVER['REMOTE_ADDR'];
$sql="SELECT number_of_tries FROM table where ip_address='$ipaddress'";
//lets say from above query the value comes -
$number_of_tries=20; // this comes from database
if($number_of_tries>20){
header("location: forbidden.php");
exit;
}
您还可以将日期时间与IP地址一起保存。并在上面的查询中将当前日期与数据库中的一个进行比较,然后重定向。
希望这有帮助
答案 1 :(得分:1)
正如评论中所建议的那样,我会使用Yii的“onBeginRequest”事件来启动此检查,并在需要时阻止调用者,就像这样(只是一个例子):
'onBeginRequest' => array('YourClass', 'staticMethod'),
这可以通过编辑main.php主配置文件来调用类中的静态方法来实现,以便在需要时进行检查并阻止请求。这就是我在基于Yii的项目中所做的工作,以实现我所拥有的一些监控要求。调用此方法时,您可以使用所有Yii的内部组件。
如果您需要知道发件人的IP地址,我建议使用比_SERVER ['REMOTE_ADDR']更强大的内容,例如使用PcMaxmindGeoIp扩展名中的 getRemoteIpAddress ()。
答案 2 :(得分:0)
前言:我不知道yii frmework,如果这是错误的树,很高兴删除答案。
为什么不将有问题的IP存储在数据库表中(连同“过期”时间,该时间表示IP无法登录,直到该时间过去),并在登录时进行检查。成功登录后,您可以删除有问题的IP地址。
答案 3 :(得分:0)