1

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

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

4

4 回答 4

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 地址一起保存。并在上面的查询中将当前日期与数据库中的日期进行比较,然后重定向。

希望这可以帮助

于 2012-08-10T09:18:29.337 回答
1

正如评论中所建议的那样,我会使用 Yii 的“ onBeginRequest ”事件来启动此检查并在需要时阻止调用者,就像这样(只是一个例子):

'onBeginRequest' => array('YourClass', 'staticMethod'),

这可以通过编辑 main.php 主配置文件来调用类中的静态方法来进行检查并在需要时阻止请求来实现。这就是我在我正在从事的基于 Yii 的项目中执行此操作的方式,以实现我所拥有的一些监控要求。调用此方法时,您可以使用 Yii 的所有内部组件。

如果您需要知道发件人的 IP 地址,我建议使用比 _SERVER['REMOTE_ADDR'] 更强大的东西,例如使用PcMaxmindGeoIp扩展中的getRemoteIpAddress () 。

于 2012-08-10T13:38:31.217 回答
0

你应该试试:

http://denyhosts.sourceforge.net/

于 2012-08-10T17:51:47.860 回答
0

前言:我不知道yii框架,如果这是错误的树,很高兴删除答案。

为什么不将有问题的 IP 存储在数据库表中(连同一个“过期”时间,表示 IP 在该时间过去之前无法登录),该表在登录时进行检查。成功登录后,您可以删除有问题的 IP 地址。

于 2012-08-10T09:17:01.973 回答