Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > include и not found


Автор: Dima85 17.5.2010, 12:30
Таким способом я подгружаю на страницу нужные мне html файлики:
Код

      <?php 
      $page = preg_replace( '#[^a-zA-Z0-9]#i',  '', $_GET['page']);
      $page = substr($page, 0, 25);
      if ($page != '') {include('page/'.$page.'.html');
      } else { echo $lang[ 'welcome']; }
      ?>


Но когда указывается в URL название файла которого нет, вылетает ошибка. Как вместо нее выводить надпись, "Такого файла нет"?

И как вам в целом код, на мой взгляд он безопасен. Или нет? 

Автор: MoLeX 17.5.2010, 12:37
перед загрузкой проверить на существование

Добавлено через 1 минуту и 9 секунд
file_exists()

Автор: Guedda 17.5.2010, 13:22
Код

 <?php 
      $page = preg_replace( '#[^a-zA-Z0-9]#i',  '', $_GET['page']);
      $page = substr($page, 0, 25);
      if (($page != '') && (file_exists('page/' . $page . '.html'))) {include('page/'.$page.'.html');
      } else { echo $lang[ 'welcome']; }
      ?>

Код небезопасный.

Автор: Sanchezzz 17.5.2010, 14:34
 smile 

Автор: Dima85 7.10.2010, 14:07
Код

      <?php 
      $page = preg_replace( '#[^a-zA-Z0-9]#i', '', GET('page'));
      $page = substr($page, 0, 25);
      if ($page != '') {
      $filename = 'page/'.$page.'_'.$lang['lang'].'.html';
      if (file_exists($filename)) {include($filename);} else {echo "Error 404";}
      } else { 
      include('page/welcome_'.$lang['lang'].'.html'); 
      }
      ?>


Guedda, почему не безопасный? 
Я ведь ограничил ввод данных в переменную a-zA-Z0-9, ограничел даже количество данных substr($page, 0, 25).

Где я не усмотрел?

Автор: bars80080 7.10.2010, 14:21
Цитата(Dima85 @  7.10.2010,  14:07 Найти цитируемый пост)
Я ведь ограничил ввод данных в переменную a-zA-Z0-9, ограничел даже количество данных substr($page, 0, 25).

интересно было бы увидеть, откуда вы взяли, что это панацея безопасности

не безопасный потому, что вы включаете файл, имя которого определяет пользователь.

Автор: Dima85 7.10.2010, 15:27
Тоесть если пользователь каким-то образом сможет залить туда какой-то вредный фал, то сможет его и запустить тем самым насести вред серверу.

Ну а как тогда выйти с такой ситуации? Создать список и страниц которые можно грузить? Их у меня около 1700 - слишком большой будет список.
Посоветуйте, как правельней в таком случае открывать страницы?


Автор: bars80080 7.10.2010, 15:37
Цитата(Dima85 @  7.10.2010,  15:27 Найти цитируемый пост)
Создать список и страниц которые можно грузить?

да

Цитата(Dima85 @  7.10.2010,  15:27 Найти цитируемый пост)
Их у меня около 1700 - слишком большой будет список.

почему-то любая информационная лента новостей с этим справляется. а у них по сотне статей в день выпускается.

просто обычно в базе хранится либо вся статья (страница) полностью, либо некоторая информация. далее сопрягается процесс создания статьи с записью её в базу. это чтобы каждый раз не приходилось что-то прописывать в базе, пусть само прописывается

ну, а при заходе пользователя по некоторой ссылке, просто ищется, есть ли такая статья (страница) и отдаётся, какая нужна. более чем ты сам разрешишь, в итоге пользователь сделать не сможет

Автор: DeamonShan 7.10.2010, 15:46
Dima85, залить все файлы в бд, и показывать странички по идентификаторам. А файлы залить в бд - 15 строчек на пхп... скрипт за вас сделает

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)