我的Laravel应用程序中的数据库是从另一个Java应用程序填充的。这两个应用程序(Java和Laravel)在同一台服务器上运行。 Java应用程序向Laravel应用程序发出带有数据的POST请求。 Laravel应用程序将发送的数据插入数据库。
问题是我无法找到验证请求的方法。我希望Laravel应用程序仅在 源来自同一服务器时接受该特定请求(例如,laravel.app/insert_data
)。
目前,路线laravel.app/insert_data
可公开访问。如何仅限于localhost,以便我不接受来自未知主机的数据。
一种方法是,我可以从请求和过滤器中获取HTTP标头。但是我假设Laravel有内置的功能来做这些事情。
答案 0 :(得分:3)
你应该使用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)与路由(控制器操作)不匹配,则不会执行。
答案 1 :(得分:1)
根据您的环境,我宁愿在Web服务器配置中执行此操作。在位置配置中,您可以指定类似
的内容请注意,以下内容仅适用于比apache 2.4更新的系统。权限指定已更改
<Location '/url/here'>
Require IP 127.0.0.1
...
</Location>
然后,Apache将处理任何不是来自localhost的请求,并且出现400未授权的错误。但是,这在共享托管环境中不起作用。