Как лучше защитить мой фреймворк от посетителей, которые не вошли в систему? - PullRequest
2 голосов
/ 22 мая 2010

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

У меня есть "домашняя" структура. У меня есть определенные файлы PHP, которые должны быть видны только для администратора. В настоящее время я делаю это на каждой странице, чтобы узнать, открыт ли сеанс. Если нет, то пользователь перенаправляется на страницу 404, и похоже, что запрошенный файл не существует.

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

Не могли бы вы дать мне несколько советов? Или оставить ссылку, где я мог бы найти?

Большое спасибо, и еще раз извините за то, что я пнул словарь.

EDIT

То, что я обычно пишу вверху каждого файла, выглядит примерно так

<?php
include("sesion.php");
$rs=comprueba(); //'check'

if ($rs) { 
?> 

А потом, в конце

<?php 
}
else { header("Location: err404.html"); }
?>

Это такая заурядная работа, не так ли?

EDIT

Допустим, у меня есть список клиентов в файле с именем customers.php

Этот файл может быть в данный момент на http://www.mydomain.com/admin/customers.php, и он должен быть виден только пользователю с правами администратора. Как только пользователь с правами администратора вошел в систему, я создаю переменную сеанса. Именно эту переменную я проверяю в верхней части каждой страницы, и, если она существует, отображается список клиентов. Если нет, пользователь перенаправляется на страницу 404.

Спасибо за ваше терпение. Я действительно ценю.

Ответы [ 3 ]

5 голосов
/ 22 мая 2010

Извиняюсь, если я неверно истолковал ваш вопрос, но я думаю, что вы спрашиваете, как лучше защитить отдельные страницы PHP, используемые в платформе, от людей, набирающих URL для их просмотра?

Если так, лучший способ, который я нашел, - это объявить константу в вашем мастер-файле (обычно index.php).

<?php
define( '_MYAPP', 1 );

Затем в верхней части каждого файла PHP ( до вы определяете свои классы) ставьте -

<?php
defined( '_MYAPP' ) or die( 'No access.' );
3 голосов
/ 22 мая 2010

Я настоятельно рекомендую вам использовать сеансы.

Теперь я думаю, что есть два способа сделать это.

Самый простой способ, который я могу придумать: создать файл session.php и включить / потребовать его в каждом файле вашего приложения.

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

Edit: Что я делаю в файле session.php - это die (); или перенаправить с заголовком (); если правильный сеанс не обнаружен.

Если вы хотите, вы можете добавить массив «общедоступных» файлов, чтобы проверка сеанса была пропущена, если в данный момент выполняется один из этих файлов.

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

Если безопасность в вашем приложении жизненно важна, вам следует прочитать это руководство: Руководство по безопасности PHP: обзор от php консорциума по безопасности.

2 голосов
/ 22 мая 2010
<?php
$logged_in = 'no';
include("session.php"); // changes $logged_in to yes if logged in

if($logged_in == 'no'){
header("Location: login.php?error=notloggedin");
exit;
}
?>

Вы можете либо поместить это наверх всех ваших страниц, либо просто поместить это в свой файл session.php, либо создать файл header.php для включения во все страницы.

...