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