Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 仅允许来自域的请求并阻止其他源_Laravel_Laravel 7 - Fatal编程技术网

Laravel 仅允许来自域的请求并阻止其他源

Laravel 仅允许来自域的请求并阻止其他源,laravel,laravel-7,Laravel,Laravel 7,我想允许一些路由只响应我的前端网站发出的请求,这意味着出于安全原因,阻止其他来源,如postman,只允许来自前端域的请求 可能吗 例如,我有一个网页来检查链接的动态值,并验证链接上的令牌是否在数据库中,我可以考虑使用captcha,这样机器人就无法检查所有可能的组合,但这不是100%安全的。Laravel API节流 如果您的主要问题是机器人获取所有组合,那么使用CAPTCHA将帮助您实现这一点 默认情况下,所有API路由(在路由/API.php中)允许每个IP每分钟最多60个请求。通过更改t

我想允许一些路由只响应我的前端网站发出的请求,这意味着出于安全原因,阻止其他来源,如postman,只允许来自前端域的请求

可能吗

例如,我有一个网页来检查链接的动态值,并验证链接上的令牌是否在数据库中,我可以考虑使用captcha,这样机器人就无法检查所有可能的组合,但这不是100%安全的。

Laravel API节流 如果您的主要问题是机器人获取所有组合,那么使用CAPTCHA将帮助您实现这一点

默认情况下,所有API路由(在
路由/API.php
中)允许每个IP每分钟最多60个请求。通过更改
throttle:api
部分,您可以在
app/Http/Kernel.php
文件中根据自己的需要修改此金额:

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:api',
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],
];
例如,将其更改为
throttle:30:1
,意味着每个ip每分钟允许30个请求

如果您只想限制api上的某些路由,可以在其他地方使用中间件:

Route::get('my-method', MyController::class)->middleware('throttle:30:1');
创建一个限制主机的中间件 如果您想精确地按域进行限制,那么您要查找的可能是自定义的。中间件允许您检查各种请求属性(包括通过
$request->getHost()
检查请求的主机),并阻止任何控制器或方法

尽管Laravel的默认
TrustHosts
中间件提供了全局主机验证,但您可以为特定路径创建自己的自定义中间件,如下所示:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class LocalOnly
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if($request->getHost() != 'localhost')
        {
            return response('', 400);
        }
        
        return $next($request);
    }
}

正是我需要的,谢谢