Laravel 5.7: Где я могу зарегистрировать разрешенные параметры GET и заблокировать другие? - PullRequest
0 голосов
/ 18 октября 2018

У меня есть простое приложение 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

URL с другими параметрами GET должен возвращать ответ 404. Вот пример URL:

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

Примечание:

Если URL содержат один или несколько недопустимых параметров GET с или без разрешенных параметров GET , в этом случае результат также должен бытьбыть возвращенным 404.

1 Ответ

0 голосов
/ 18 октября 2018

Создание промежуточного программного обеспечения 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);

Также я бы переместил $ allowGetParameters в папку config в somefile.php,и будет иметь следующий доступ: count(array_diff($params, config('somefile.allowedGetParameters')) == 0;

Не забудьте:

1) зарегистрировать ваше промежуточное ПО в app \ Http \ Kernel.php в protected $routeMiddleware

2) оберните свои маршруты в web.php с помощью:

Route::group(['middleware' => ['name_of_your_widdleware']], function () {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...