Nickname-no
@Nickname-no

PHP единая точка входа?

сайта есть 3 папки
all - доступна всем
guest - доступно только не авторизированным
auth - доступна только авторизованным

Также в корне есть скрипт обработчик
index.php В нем такой код
d4393a5a1a0a4a9db096a597cbfddaa9.pngВ корне
Всё бы хорошо но не могу использовать $_GET
Как исправить?

if ($_SERVER['REQUEST_URI'] == '/') 
	$page = 'home'; 
	else
	$page = substr($_SERVER['REQUEST_URI'], 1); 
	if (file_exists("all/$page.php")) 
	include "all/$page.php"; 
	else if ($_SESSION['logged_user'] and file_exists("auth/$page.php"))
	include "auth/$page.php";
	else if (!$_SESSION['logged_user'] and file_exists("guest/$page.php"))
	include "guest/$page.php";
	else
	header('Location: /404');
  • Вопрос задан
  • 922 просмотра
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov Куратор тега PHP
Web developer
1. И в чем проблема использовать $_GET?

2.
guest - доступно только авторизированным
auth - доступна только не авторизованным

Может, наоборот?

3. Ваша защита бесполезна. Если сами не догадаетесь, то подсказка под картинкой.
d94138075810420aa9d5b4894aada4f2.jpg
Подсказка: что будет, если гость запросит example.com/../auth/super_secret_file ?
Ответ написан
@ZackCodex
Ну если подумать правильно то нужно сделать проверку чтобы ваше изображение не соответствовала статистике кода и хоть как-то его защитить.

В принципе код с такой проверкой довольно таки не плох, а в случае если пользователь введет в адресную сироку ссылку с путём до самого файла в системе ему выпадет ошибка.
Спросите почему?
Объясняю:
Для начала первые строки кода нужно чуток изменить.
К примеру делаем проверку на ввод символов в адресную строку:


if ( $_SERVER['REQUEST_URI'] == '/' )
$page = 'home';
else {
if ( !preg_match('/^[A-z0-9]{3,15}$/', $page) ) not_found();
}

и меня ем название папок с файлами с:
all на all_access
guest на guest_access
и
auth на authorized

Этим образом мы сделали название папок уже содержащие больше половины максимальной длинны вводимых символов (15 символов), а так как у нас после site.domain
в адресной строке будет сочетание символов /authorized/account.php к примеру, то математика вам в помощь , в этом наборе уже содержаться больше 15 символов, тоесть 23.
Так что будет ACCESS DENIED !!!!! )))))))))))))))))))))0

После этой проверки , пользователь не сможет ввести в адресную строку меньше 3 и больше 15 символов.
Это первая стадия проверки на безопасность.

Кстати , в место not_found() делайте вывод ошибок например через echo""; или перенаправьте пользователя на страницу 404, в общем как вам угодно.


Дальше!
А далее мы подключаем файл настроек сервера .htaccess который должен содержать следующий код :

RewriteEngine on
RewriteRule .* index.php [L]

Этим образом, мы запускаем файл настроек и говорим серверу что будем обрабатывать запросы ТОЛЬКО строго через файл index.php.
Так что у злоумышленников хоть и есть шансы на взлом, им на это потребуется не мало времени.
В дополнении можно подключить проверку на изменении кодовой структуры что приведёт к блокированию доступа к сайту при попытке взлома , на пример сайт полностью станет для взломщика не доступным из за того что пр и попытке взлома сработала проверка на изменение структуры кода и внесла IP злоумышленника в черный список системы.
Это можно сделать при помощи PHP и MySQL.
На этом у меня всё ))).
Желаю всем удачи.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы