Я - новичок в 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 новому идентификатору сессии будет создан.
В большинстве случаев, тем не менее, мы не можем уничтожить сессию из-за других компонентов сайта.
Спасибо
Предложенное решение подходит. Альтернативные решения:
Прежде всего следует отметить, что, похоже, ваше использование «Контроллера» и «представления» радикально отличается от моего - я бы интерпретировал это как часть шаблона MVC - в в этом случае браузер никогда не будет запрашивать view.php, это должен быть включаемый файл, вызываемый через include / require из файла контроллера. Кроме того, как включаемый файл, он не должен содержать какого-либо встроенного кода - поэтому, даже если бы он был доступен напрямую из браузера, он ничего не делал бы при вызове из браузера.
Если вы просто имеете в виду, что у вас есть два сценария, а второй должен вызываться только первым, то проблема заключается в подделке межсайтовых запросов - на сайте ведется много-много дискуссий о том, как этого избежать в Интернете, большая часть из которых объясняет, почему использование $ _SERVER ['HTTP_REFERER'] является пустой тратой времени.
Следует избегать передачи связанных с транзакцией данных через сеанс любой ценой - не в последнюю очередь из-за проблемы псевдонима сеанса.
С.