(PHP - Session) Как пользователь может ограничить доступ напрямую к controller.php, разрешить доступ только из view.php? - PullRequest
1 голос
/ 09 июля 2010

Я новичок в 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;
   }
?>

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


Edit:

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

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

Спасибо

Ответы [ 2 ]

1 голос
/ 09 июля 2010

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

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

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

с.

1 голос
/ 09 июля 2010

Предлагаемое решение в порядке.Альтернативные решения:

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