2012-08-10 65 views
1

如果用户未能多次验证(15〜20),我该如何在规定的时间内阻止用户IP地址。这是为了防止暴力攻击而实施的。阻塞IP地址一段时间。

我必须在yii中实现这个。我试图在控制器中使用php头函数实现,但它没有解决。另外如何设置时间限制,如何设置时间限制?

+1

看看这个http://www.yiiframework.com/forum/index.php/topic/7692-best-way-to-implement-an -ip-filter/ – adamors 2012-08-10 09:43:05

回答

0

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

为什么不将有问题的IP存储在数据库表中(以及“过期”时间,该时间表示IP无法登录,直到该时间通过),这是在登录时检查的。成功登录后,您可以删除违规的IP地址。

+0

我没有一个有问题的IP列表。这是一个新网站。我想为场景安装一项安全措施,以便几乎可以确定这是某种强力攻击,例如20次登录失败尝试。但是,我想阻止只有半小时到一小时的IP,以防它来自私人网络。所以,这是一个临时块。 – 2012-08-11 04:51:39

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

希望这有助于

+3

我建议在标题(“Location ...”)之后添加exit()(或die()),以便脚本执行停止。 – GeneSys 2012-08-10 09:20:42

+0

@GeneSys,是的+1对于那个 – WatsMyName 2012-08-10 09:22:12

+1

请注意,HTTP位置标头的正确形式是** ** ** **:**绝对** - uri'([RFC2626#14.30](http:// tools.ietf.org/html/rfc2616#section-14.30))..尽管我知道现代网络浏览器也会接受相对的URL。所以我想它应该没问题)。 – GeneSys 2012-08-10 09:25:30

1

正如评论所说,我会用Yii中的“onBeginRequest”事件来启动这样的检查,如果需要的话,像这样(只是一个例子)阻塞调用者:

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

这可以通过编辑main.php主配置文件来调用类中的静态方法来完成,如果需要的话可以执行检查并阻止请求。这就是我在我正在开发的基于Yii的项目中所做的工作,以实现我的一些监控要求。当调用这个方法时,你的腰带上有所有Yii的内部组件。

如果你需要知道,我建议使用的东西比_ SERVER [“REMOTE_ADDR”]更强大的发送者的IP地址,就像使用getRemoteIpAddress()从PcMaxmindGeoIp扩展。