За последние 24 часа нас посетили 20887 программистов и 1604 робота. Сейчас ищут 2214 программистов ...

Излишняя ли предосторожность?

Тема в разделе "PHP для профи", создана пользователем askanim, 8 авг 2017.

  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Роутер на слиме.
    Суть в том что есть гет ссылки которые проверяются на доступ пользователем.
    Из этих ссылок идут пост запросы которые находятся в подгруппе сабгроуп и в них есть проверка на то что эти запросы разрешены с десктопа, но на эти же маршруты могут посылаться с других ссылок доступных например из админки, нужно ли эти маршруты в постах проверять на доступ или же нет?

    PHP:
    1.  // Подгруппа маршрутов проверяемая на общий доступ.
    2.     $app->subgroup(function () use($app){
    3.         $app->get('/content', Controller\Admin\Content\Content::class . ':content');
    4.         $app->get('/desktop', Controller\Admin\Desktop\Desktop::class . ':index');
    5.         $app->get('/admins', Controller\Admin\Desktop\Desktop::class . ':index');
    6.         $app->get('/sites', Controller\Admin\Desktop\Desktop::class . ':index');
    7.         $app->get('/service', Controller\Admin\Desktop\Desktop::class . ':index');
    8.         $app->get('/system', Controller\Admin\Desktop\Desktop::class . ':index');
    9.     })->add(function(Request $request, Response $response, $admin) {
    10.         if(Users\AccessUser::AccessUser(Users\User::getUserID(), $request->getUri()->getPath()) === false) {
    11.             return $response->withStatus(302)->withHeader('Location', '/admin/access/denied');
    12.         }
    13.         return $admin($request, $response);
    14.     });
    15.  
    16.     // Пост группа маршрутов для рабочего стола DESKTOP
    17.     $app->subgroup(function() use($app){
    18.         $app->post('/getSites', Controller\Admin\PostResponse\Sites::class . ':getSites');
    19.         $app->post('/addSite', Controller\Admin\PostResponse\Sites::class . ':addSite');
    20.         $app->post('/getActiveSite', Controller\Admin\PostResponse\Sites::class . ':getActiveSite');
    21.         $app->post('/selectSite', Controller\Admin\PostResponse\Sites::class . ':selectSite');
    22.     })->add(function(Request $request, Response $response, $admin) {
    23.         if(Users\AccessUser::AccessUser(Users\User::getUserID(), 'desktop') === false) {
    24.             return $response->withJson(['access' => 'denied']);
    25.         }
    26.         return $admin($request, $response);
    27.     });
    Или же второй вариант убрать второй слой защиты доступа
    PHP:
    1.  // Подгруппа маршрутов проверяемая на общий доступ.
    2.     $app->subgroup(function () use($app){
    3.         $app->get('/content', Controller\Admin\Content\Content::class . ':content');
    4.         $app->get('/desktop', Controller\Admin\Desktop\Desktop::class . ':index');
    5.         $app->get('/admins', Controller\Admin\Desktop\Desktop::class . ':index');
    6.         $app->get('/sites', Controller\Admin\Desktop\Desktop::class . ':index');
    7.         $app->get('/service', Controller\Admin\Desktop\Desktop::class . ':index');
    8.         $app->get('/system', Controller\Admin\Desktop\Desktop::class . ':index');
    9.     })->add(function(Request $request, Response $response, $admin) {
    10.         if(Users\AccessUser::AccessUser(Users\User::getUserID(), $request->getUri()->getPath()) === false) {
    11.             return $response->withStatus(302)->withHeader('Location', '/admin/access/denied');
    12.         }
    13.         return $admin($request, $response);
    14.     });
    15.  
    16.     // Пост группа маршрутов для рабочего стола DESKTOP
    17.        $app->post('/getSites', Controller\Admin\PostResponse\Sites::class . ':getSites');
    18.        $app->post('/addSite', Controller\Admin\PostResponse\Sites::class . ':addSite');
    19.        $app->post('/getActiveSite', Controller\Admin\PostResponse\Sites::class . ':getActiveSite');
    20.        $app->post('/selectSite', Controller\Admin\PostResponse\Sites::class . ':selectSite');
    21.    
    --- Добавлено ---
    И если нужно то как лучше сделать а то я уже совсем в маршрутах запутался... Просто я не хочу чтобы из определённой страницы могли отправляться запросы, если там их не должно быть.
     
  2. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Что не у кого ни каких предложений нет ?)
     
  3. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Зачем? Я логики твоей не пойму, запили адаптивный дизайн или приложение, в дизайне можешь убрать не нужные ссылки, а в приложении экраны. Как будто кто пользуется адресной строкой браузера и что то туда вводит, а если так приходится делать то это уже не правильно так как должна быть ссылка на которую можно жмякнуть)))
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.588
    Симпатии:
    1.763
    То, что урлы не видно, не значит, что по ним нельзя перейти.
     
  5. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    Защита нужна, но не такая. Это маразм. Не одна проверка не поможет если в хроме открою чёрную анонимную вкладку, которая не шлёт юзер агент. Url введу в строку в браузера и не будет хттп реферера, а ещё я сменю apn.

    Я считаю что единственный выход пилить адаптивный дизайн.
    --- Добавлено ---
    Никогда нельзя доверять данным от пользователя, у моего сервера может и не быть браузера, монитора и прочей ерунды, а запросы может слать хоть каждую секунду.
     
    #5 Васяня, 10 авг 2017
    Последнее редактирование: 10 авг 2017
    Fell-x27 нравится это.
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.588
    Симпатии:
    1.763
    У него в middleware, по ходу, проверка на авторизацию, так что твоя анонимная вкладка не будет слать сессионную куку, если у тебя нет пароля от его сайта. Защита от её кражи - это другой разговор.
     
  7. Васяня

    Васяня Активный пользователь

    С нами с:
    2 окт 2016
    Сообщения:
    238
    Симпатии:
    32
    Адрес:
    Россия, Приморский край, г. Находка.
    У меня нет, у людей которые этим пользоваться будут есть.

    Суть в вот в чём:
    Вот тут как раз анонимная вкладка поможет)


    Согласен
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    И как ты отследишь, с какой страницы они были отправлены? По реферу? На основе данных от пользователя?
    Запомни и прими как факт - запросы тебе могут быть отправлены откуда угодно. Какие угодно. Всегда, вот воооообще всегда исходи из того факта, что запрос уже послан. Думай не "как предотвратить запрос", а "как корретно обработать и не облажаться".

    Не хочешь, чтобы у кого-то был доступ куда-то - разруливай это на уровне прав доступа, а не роутингом.
     
    askanim, mahmuzar и Васяня нравится это.