Роутер на слиме. Суть в том что есть гет ссылки которые проверяются на доступ пользователем. Из этих ссылок идут пост запросы которые находятся в подгруппе сабгроуп и в них есть проверка на то что эти запросы разрешены с десктопа, но на эти же маршруты могут посылаться с других ссылок доступных например из админки, нужно ли эти маршруты в постах проверять на доступ или же нет? PHP: // Подгруппа маршрутов проверяемая на общий доступ. $app->subgroup(function () use($app){ $app->get('/content', Controller\Admin\Content\Content::class . ':content'); $app->get('/desktop', Controller\Admin\Desktop\Desktop::class . ':index'); $app->get('/admins', Controller\Admin\Desktop\Desktop::class . ':index'); $app->get('/sites', Controller\Admin\Desktop\Desktop::class . ':index'); $app->get('/service', Controller\Admin\Desktop\Desktop::class . ':index'); $app->get('/system', Controller\Admin\Desktop\Desktop::class . ':index'); })->add(function(Request $request, Response $response, $admin) { if(Users\AccessUser::AccessUser(Users\User::getUserID(), $request->getUri()->getPath()) === false) { return $response->withStatus(302)->withHeader('Location', '/admin/access/denied'); } return $admin($request, $response); }); // Пост группа маршрутов для рабочего стола DESKTOP $app->subgroup(function() use($app){ $app->post('/getSites', Controller\Admin\PostResponse\Sites::class . ':getSites'); $app->post('/addSite', Controller\Admin\PostResponse\Sites::class . ':addSite'); $app->post('/getActiveSite', Controller\Admin\PostResponse\Sites::class . ':getActiveSite'); $app->post('/selectSite', Controller\Admin\PostResponse\Sites::class . ':selectSite'); })->add(function(Request $request, Response $response, $admin) { if(Users\AccessUser::AccessUser(Users\User::getUserID(), 'desktop') === false) { return $response->withJson(['access' => 'denied']); } return $admin($request, $response); }); Или же второй вариант убрать второй слой защиты доступа PHP: // Подгруппа маршрутов проверяемая на общий доступ. $app->subgroup(function () use($app){ $app->get('/content', Controller\Admin\Content\Content::class . ':content'); $app->get('/desktop', Controller\Admin\Desktop\Desktop::class . ':index'); $app->get('/admins', Controller\Admin\Desktop\Desktop::class . ':index'); $app->get('/sites', Controller\Admin\Desktop\Desktop::class . ':index'); $app->get('/service', Controller\Admin\Desktop\Desktop::class . ':index'); $app->get('/system', Controller\Admin\Desktop\Desktop::class . ':index'); })->add(function(Request $request, Response $response, $admin) { if(Users\AccessUser::AccessUser(Users\User::getUserID(), $request->getUri()->getPath()) === false) { return $response->withStatus(302)->withHeader('Location', '/admin/access/denied'); } return $admin($request, $response); }); // Пост группа маршрутов для рабочего стола DESKTOP $app->post('/getSites', Controller\Admin\PostResponse\Sites::class . ':getSites'); $app->post('/addSite', Controller\Admin\PostResponse\Sites::class . ':addSite'); $app->post('/getActiveSite', Controller\Admin\PostResponse\Sites::class . ':getActiveSite'); $app->post('/selectSite', Controller\Admin\PostResponse\Sites::class . ':selectSite'); --- Добавлено --- И если нужно то как лучше сделать а то я уже совсем в маршрутах запутался... Просто я не хочу чтобы из определённой страницы могли отправляться запросы, если там их не должно быть.
Зачем? Я логики твоей не пойму, запили адаптивный дизайн или приложение, в дизайне можешь убрать не нужные ссылки, а в приложении экраны. Как будто кто пользуется адресной строкой браузера и что то туда вводит, а если так приходится делать то это уже не правильно так как должна быть ссылка на которую можно жмякнуть)))
Защита нужна, но не такая. Это маразм. Не одна проверка не поможет если в хроме открою чёрную анонимную вкладку, которая не шлёт юзер агент. Url введу в строку в браузера и не будет хттп реферера, а ещё я сменю apn. Я считаю что единственный выход пилить адаптивный дизайн. --- Добавлено --- Никогда нельзя доверять данным от пользователя, у моего сервера может и не быть браузера, монитора и прочей ерунды, а запросы может слать хоть каждую секунду.
У него в middleware, по ходу, проверка на авторизацию, так что твоя анонимная вкладка не будет слать сессионную куку, если у тебя нет пароля от его сайта. Защита от её кражи - это другой разговор.
У меня нет, у людей которые этим пользоваться будут есть. Суть в вот в чём: Вот тут как раз анонимная вкладка поможет) Согласен
И как ты отследишь, с какой страницы они были отправлены? По реферу? На основе данных от пользователя? Запомни и прими как факт - запросы тебе могут быть отправлены откуда угодно. Какие угодно. Всегда, вот воооообще всегда исходи из того факта, что запрос уже послан. Думай не "как предотвратить запрос", а "как корретно обработать и не облажаться". Не хочешь, чтобы у кого-то был доступ куда-то - разруливай это на уровне прав доступа, а не роутингом.