LINUX.ORG.RU

[security][web] if(!include)

 ,


0

0

Есть index.php, нужную информацию он выводит посредством инклуда страницы, на которую указывает @$_GET["page"]. Выбор идет через switch(). Примерно:

switch(@$_GET['page'])
{
case "main": $page="main"; break;
case "exit": $page="exit"; break;

default: $page="main"; break;
}
include ("pgs/".$page.".php");

авторизация пользователя проверяется в самом index.php до вывода страниц. Из-за этого получается, что, неавторизовавшись, например, на адрес localhost/proj/index.php?page=main попасть не получится, точнее не увидишь страницу, но ее можно увидеть по адресу localhost/proj/pgs/main.php. Это при условии, что знаешь структуру директорий. Хоть и узнать ее сложно, но получается криво.

Есть ли смысл проверку авторизации ставить в начало каждого файла в /pgs/ или все-таки можно защитить страницу от "прямого вызова" (не через include)?

★★

index.php:
<code>
define(IN, 1);

switch(@$_GET['page'])
{
case "main": $page="main"; break;
case "exit": $page="exit"; break;

default: $page="main"; break;
}
include ("pgs/".$page.".php");
</code>

main.php:
<code>
if(!IN) exit();
</code>

Как-то так.

LebedevRI
()

$page = in_array($_GET['page'], array('main','exit')) ? $_GET['page'] : 'main'

Так гораздо лучше

Voker57 ★★
()
Ответ на: комментарий от vitroot

самописный движок работает точно так же.
Использую in_array()(динамически сканю директории на предмет файлов подходящих под шаблон) при инклюде страницы (вложенность аще многоярусная).
В index.php в начале определяется служебный массив, какой-то $ARR; в начале любой странички обязательно стоит
if(!$ARR)
exit;

markevichus ★★★
()

думаю достаточно закрыть pgs/ htaccess-ом

ELF ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.