我有简单的 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。
创建中间件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 () {