我有一个简单的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
注意:
在这种情况下,如果网址包含一个或多个不允许的GET参数 带有或不带有允许的GET参数 ,则结果也应返回404。
答案 0 :(得分: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 () {