允许仅在PHP中从允许的IP机器中命中URL?

时间:2015-03-30 14:25:54

标签: php codeigniter

我们使用CodeIgnitor PHP框架制作了网站。我们运行一个cron作业用它来点击一个URL。

但是使用该URL可以从任何机器上点击它,因为它的功能是与数据库相关的任务。

我们希望仅在服务器IP或特定IP列表中启用该功能,以便我们只添加允许的机器可以访问该URL吗?

我们如何做到这一点?

3 个答案:

答案 0 :(得分:0)

您可以对apache或nginx使用限制。这将更安全。

对于nginx

location /path/to {
    allow 192.168.1.1/24;
    allow 127.0.0.1;
    deny 192.168.1.2;
    deny all;
}

对于apache

<Location /path/to>
    Order deny,allow
    deny from all
    allow from 192.168.
    allow from 104.113.
</Location >

ApacheNginx

答案 1 :(得分:0)

也许你应该使用.htaccess文件? (如果您使用Apache)Doc:http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html

<Directory /www>
    Order Deny,Allow
    Deny from all
    Allow from YOUR_IP
</Directory>

在PHP中,您可以在脚本之上执行此操作:

$allow = array("123.456.789", "456.789.123", "789.123.456"); //allowed IPs

if(!in_array($_SERVER['REMOTE_ADDR'], $allow) && !in_array($_SERVER["HTTP_X_FORWARDED_FOR"], $allow)) {
    header("HTTP/1.0 404 Not Found");
    exit();
}

答案 2 :(得分:0)

如果我是你,我会为CLI请求提供扩展条件,或者让我们说管理方法。 CI3

<?php if !defined('BASEPATH') exit('No direct script access allowed!');

class Cronjob extends CI_Controller
{
    public function __construct()
    {
        if (!is_cli() && !is_admin()) {//assuming you have some login/checking module for admin
            redirect('welcome', 'refresh')
        }
    }

    public function index()
    {
        //your code here
    }
}

CI2

<?php if !defined('BASEPATH') exit('No direct script access allowed!');

class Cronjob extends CI_Controller
{
    public function __construct()
    {
        if (!$this->input->is_cli_request() && !is_admin()) {//assuming you have some login/checking module for admin
            redirect('welcome', 'refresh')
        }
    }

    public function index()
    {
        //your code here
    }
}

解释一下:CLI检查(检查CodeIgniter Input class/library)将允许服务器通过cronjob,并检查管理员是否允许授权用户通过该控制器进行调用。因此,您不必担心IP,因为授权人员甚至可以从其他位置进行cron工作。 换句话说,任何不是SERVER或管理员的人都无法调用此controller/method