(PHP - Сессия), Как пользователь может ограничить доступом direcly к controller.php, только предоставьте доступ от view.php?

Я - новичок в PHP.

Как я могу ограничить пользовательский доступ к controller.php и предоставить доступ к нему только через view.php?


Мое предложение:

Я не знаю, является ли это надлежащим, или как избежать роботов, получающих доступ к нему непосредственно.


view.php:

  <?php
    session_start();
    $_SESSION['isFromView'] = true;
    ?>

  <html>
   <body>
    <form action="controller.php">
    <input type="submit"/>
    </form>
   </body>
  </html>

controller.php

<?php
   session_start();
   if(!isset($_SESSION['isFromView'])||!$_SESSION['isFromView']){exit();}
   else{

   //code here

   $_SESSION['isFromView']=false;
   }
?>

Запишите то, что делает я отсутствую и в котором пути мой контроллер может быть доступом непосредственно или другой проблемой безопасности (если Вы можете примеры).


Править:

В случае, если это, я не сделал, чтобы пользователь вошел в него, может быть защищено путем уничтожения сессии это controller.php после выполненного кода, затем когда пользовательский возврат к view.php новому идентификатору сессии будет создан.

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

Спасибо

1
задан Joseph Mastey 10 July 2010 в 13:51
поделиться

2 ответа

Предложенное решение подходит. Альтернативные решения:

  1. использовать некоторый хэш в скрытом поле формы view.php (в view.php создать некоторый md5('secret') и затем проверить его в controller.php). Это решение является наиболее безопасным.
  2. проверять реферальный url (я категорически не согласен, так как это связано с вопросами безопасности) - $_SERVER['HTTP_REFERER']. Эта переменная может быть легко подделана (изменена клиентом), поэтому полагаться на нее - риск для безопасности.
1
ответ дан 2 September 2019 в 23:10
поделиться

Прежде всего следует отметить, что, похоже, ваше использование «Контроллера» и «представления» радикально отличается от моего - я бы интерпретировал это как часть шаблона MVC - в в этом случае браузер никогда не будет запрашивать view.php, это должен быть включаемый файл, вызываемый через include / require из файла контроллера. Кроме того, как включаемый файл, он не должен содержать какого-либо встроенного кода - поэтому, даже если бы он был доступен напрямую из браузера, он ничего не делал бы при вызове из браузера.

Если вы просто имеете в виду, что у вас есть два сценария, а второй должен вызываться только первым, то проблема заключается в подделке межсайтовых запросов - на сайте ведется много-много дискуссий о том, как этого избежать в Интернете, большая часть из которых объясняет, почему использование $ _SERVER ['HTTP_REFERER'] является пустой тратой времени.

Следует избегать передачи связанных с транзакцией данных через сеанс любой ценой - не в последнюю очередь из-за проблемы псевдонима сеанса.

С.

1
ответ дан 2 September 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: