Laravel 5.7:在哪里可以注册允许的 GET 参数并阻止其他参数?

问题描述 投票:0回答:1

我有简单的 Laravel 应用程序,并且我的应用程序有自定义允许的 GET 参数:

$allowedGetParameters = [
  'user',
  'event',
  'action'
]

如何屏蔽除数组中指定参数之外的所有其他 GET 参数?

例如可能的 URL 地址:

 - https://app.com/?user=16
 - https://app.com/?event=242&user=16
 - https://app.com/?user=16&event=242&action=like

带有其他 GET 参数的 URL 必须返回响应 404。以下示例 URL:

 - https://app.com/?user=16&post=43&like=true
 - https://app.com/?guru=242&set=superguru&action=true

注意:

如果 URL 包含一个或多个不允许的 GET 参数 无论有或没有允许的 GET 参数,在这种情况下,结果也应该返回 404。

php laravel query-string laravel-5.7 whitelist
1个回答
1
投票

创建中间件https://laravel.com/docs/5.7/middleware

实施

handle
方法,您可以在其中进行检查:

$params = array_keys($request->all());
$is_valid_params = count(array_diff($params, $allowedGetParameters)) == 0;
$is_get_request = $request->method() == 'GET';
if ($is_valid_params && $is_get_request) {
    return $next($request);
};
return abort(404);

我还将 $allowedGetParameters 移动到 somefile.php 中的 config 文件夹,并像这样访问:

count(array_diff($params, config('somefile.allowedGetParameters')) == 0;

别忘了:

1) 在

protected $routeMiddleware

中的 app\Http\Kernel.php 中注册你的中间件

2)将你的路由包装在 web.php 中:

Route::group(['middleware' => ['name_of_your_widdleware']], function () {
© www.soinside.com 2019 - 2024. All rights reserved.