阻止IP地址一段时间。

时间:2012-08-10 09:14:16

标签: php security yii

如果用户未能多次验证(15~20),如何阻止用户IP地址达到规定的时间限制。这是为了防止暴力攻击而实施的。

我必须在yii中实现这一点。我尝试在控制器中使用php头函数实现,但它没有成功。另外,如何设置时间限制,如何设置块的时间限制?

4 个答案:

答案 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)