限制某些路由访问拉拉维尔的本地主机


Restricting certain routes access to localhost in Laravel

我的Laravel应用程序中的数据库是从另一个Java应用程序填充的。这两个应用程序(Java和Laravel)在同一台服务器上运行。Java 应用程序向 Laravel 应用程序发出带有数据的 POST 请求。Laravel应用程序将发送的数据插入数据库。

问题是我找不到对请求进行身份验证的方法。我希望Laravel应用程序仅在源来自同一服务器时才接受该特定请求(例如,laravel.app/insert_data)。

目前,路线laravel.app/insert_data可公开访问。如何限制为仅本地主机,以便不接受来自未知主机的数据。

一种方法是,我可以从请求和过滤器中获取 HTTP 标头。但我假设Laravel具有内置的功能来做这些事情。

你应该使用拉拉维尔过滤器。

可以这样定义:

Route::filter('localCallOnly', function()
{
    //if IPs don't match - 404
    if (Request::server('SERVER_ADDR') != Request::server('REMOTE_ADDR'))
    {
        return App::abort(404);
    }
});

稍后用于您想要的任何路线:

Route::get('insert_data', array('before' => 'localCallOnly', 'uses' => 'MyController@insertData'));

基本上,这意味着"localCallOnly"过滤器必须应用于"insert_data"路由。因此,如果您的规则(同一 IP)不匹配,则不会执行路由(控制器操作)。

根据您的环境,我宁愿在 Web 服务器配置本身中执行此操作。在位置配置中,您可以指定类似的东西

请注意,以下内容仅适用于比 apache 2.4 更新的系统。权限指定已更改

<Location '/url/here'>
Require IP 127.0.0.1
...
</Location>

然后,Apache 将处理任何不是来自本地主机的请求,并出现 400 未授权错误。但是,这在共享托管环境中不起作用。