Дыры в структуре сайта

docjohn

Новичок
Дыры в структуре сайта

Хочу в построении сайта использовать следующую структуру:
заголовок и левая (управляющая) области - постоянные, а основная - в зависимости от переменной $str.
Переменная $str перед употреблением режется и освобождается от возможных слэшэй. Далее в таблице производится поиск единственного данного значения. Если это так, то выводим ссылку типа index.php?p='$str'. Далее $str=$str.$ext и в основную область сайта делаю @include($str)
Существует ли ли в данной структуре дыра в безопасности.

А то недавно прочитал пост tony2001:

>если немного поискать, то можно найти еще сайты, которые >юзают index.php?page=aaa и include($page);
 

Апокалипсис

Guest
А что ты имеешь ввиду безопастность?
Токо чтобы не было глюков , делай так
PHP:
if(file_exists($page)){
@include($page);
}else{ echo"Неверный Запрос";
}
 

Sirius

PHP+MySQL=LOVE
Знаешь - дело даже не в том - есть дыры иль нет - это просто непрофессионально так писать!
А можешь сделать так?
$r[0]='index';
$r[1]='main';
$r[2]='contacts';
...
$r[n]='exit';

И при вызове index.php?page=n проверять на наличии такого элемента массива и инклудить соответствующую элементу массива страницу!
 

maxidesk

Новичок
а чем плох такой метод?
PHP:
switch ($page) {
	case 'index': @include 'index.php'; break;
	case 'main': @include 'main.php'; break;
	case 'contacts': @include 'contacts.php'; break;


	default: @include 'default.php';
}
 

Макс

Старожил PHPClub
$r[0]='index';
$r[1]='main';
$r[2]='contacts';
...
$r[n]='exit';

И при вызове index.php?page=n
только не забудь сначало прописать:
$r = array();
а то тебе понаписывают:
index.php?page=128&r[128]=/etc/passwd
(это естественно при register_globals = on)
 

RomikChef

Guest
а лучше всего писать без уродских стр в адресе, а делать нормальные страницы, вида
news.php
articles.php
 

SeazoN

Guest
а чем плох такой метод?

switch ($page) {
case 'index': @include 'index.php'; break;
case 'main': @include 'main.php'; break;
case 'contacts': @include 'contacts.php'; break;

default: @include 'default.php';
}
На каждую страничку - придётся добавлять условие

if(file_exists($page)){
@include($page);
}else{ echo"Неверный Запрос";
}
?page=/apache/logs/access.log

С ромиком согласен
 

maxidesk

Новичок
На каждую страничку - придётся добавлять условие
ну если страница всего одна и в нее инклуд содержание, то на одну страницу одно условие не так уж много...
 

SeazoN

Guest
ну если страница всего одна и в нее инклуд содержание, то на одну страницу одно условие не так уж много...
Вполне возможно что "инклуд содержание" начнут плодиться как тараканы и загромождать код. А уж при добавлении||удалении я и вообще молчу.
 

Sirius

PHP+MySQL=LOVE
2 Maxim Matyukhin :
А обязательно array прописывать?

Я по данной структуре инклужу так:
include_once C_INTERNAL_PATH.'/'.$r[n].'.php';

Вроде так хакнуть трудновато будет!

И ещё - как может array помочь - я чо то не понял!


2 SeazoN: Ничего загромождать не будет - только один инклуд всего - в зависимости от выбора!

Всем: Если создавать для каждой функции страницу, как её прописывать в меню??? Каждый раз header менять что-ли?
 

SeazoN

Guest
А обязательно array прописывать?
?r[n]=../../blabla

include_once C_INTERNAL_PATH.'/'.$r[n].'.php';

приведёт к ошибке, что уже неплохо.

2 SeazoN: Ничего загромождать не будет - только один инклуд всего - в зависимости от выбора!
$r[n] будешь каждый раз прописывать, когда новая страничка добавится?
 

RomikChef

Guest
Sirius
Если создавать для каждой функции страницу, как её прописывать в меню??? Каждый раз header менять что-ли?
в меню надо писать на нее обычную ссылку.
А при чем тут хидер - вообще загадка.
 

Sirius

PHP+MySQL=LOVE
2 SeazoN:
А так себя хакнуть я могу?
index.php?page=../../../passwd';echo'

$r[n] прописывать? Нет - менять с помощью редактирования php конфиг файла. А сам конф файл инклудить.

2 RomikChef:
Прости - я всё в своих думках. В header.php обычно сидит верх сайта, т.е. меню. Я так думаю, что данная тема удобна для меню сайта - легко добавлять новые меню!
 

RomikChef

Guest
Что-то я тебя не понял.
ты говоришь, что у тебя меню в header.php
и не хочешь его менять при добавлении в меню новых пунктов. Это как?
 

Sirius

PHP+MySQL=LOVE
Это примерно так:
$r[0]='index';$r[1]='main';$r[2]='contacts'; ... $r[n]='exit';

header.php:
$c=0;
while ($r[$c]) {
echo '<a href="'.C_PATH.'/index.php?page='.$r[$c].'.php">'.$l[$c].'</a><br>';
}

Где $l[$c] из ланг файла!
 

RomikChef

Guest
Ну и кто тебе мешает написать
$c=0;
while ($r[$c]) {
echo '<a href="'.C_PATH.'/'.$r[$c].php.'">'.$l[$c].'</a><br>';
}
???
 

Sirius

PHP+MySQL=LOVE
Мне пожалуй нужно будет тебе выслать свой архив, чтобы всё объяснить. В index.php есть кое-что связывающее все эти файлы:) А именно инклуд основного конфига, ланг файла и т.д. Так что написания каждого нового пункта меню не сопрягается со сложностями в написании!
 

RomikChef

Guest
Те же самые инклюды можно подключать и к файлу news.php
Уж поверь, у меня инклюдится не меньше.
 
Сверху