Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Безопасный include, Безопасность 
:(
    Опции темы
Danox
Дата 4.3.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


=)
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 28.1.2006

Репутация: 1
Всего: 2



Народ к примеру есть такой скриптик

Код

<?
include ("pages/$go.php");
?>

Тоесть для удобства пишу в адресной строке Index.php?go=start и октрывается файл start.php в папке pages и все это красиво но злоумышник может кое что сделать и если например файла start.php нет в pages он пишет некрасивые слова.
Я знаю про метод switch c case но мне лень всегда заново прописывать новый модуль.
Мне надо чтоб он читал все файлы в директории pages странивал их с $go если там есть заданный файл чтоб он иго открывал а если нет писал сообщение об ошибке а не то красоту что он мне пишет!
Добавлено @ 23:15
Спасибо что пытались помочь smile я чегото ступил очеень сильно и не подумал вот моё решение

Код

<?
$go=str_replace("/","",$go); 
if (file_exists("pages/$go.php"))
{
Include ("pages/$go.php");
}
Else
{
Echo "Error!!!";
}
?>


Простите меня модеры smile

Это сообщение отредактировал(а) Danox - 4.3.2006, 23:17
PM MAIL   Вверх
Ciber SLasH
Дата 5.3.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 3
Всего: 67



Используй basename. Видимо ты плохо читал этот топик (а зря): http://forum.vingrad.ru/index.php?showtopic=38887
PM   Вверх
CyClon
Дата 5.3.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Самый красивый и безопасный вариант, это switch.

Код
<?php

switch ($_GET['go'])
{
    case "files":
        include("includes/files.php");
        break;
    case "links":
        include("includes/links.php");
        break;
    case "stories":
        include("includes/stories.php");
        break;
    case default:
        include("includes/news.php");
        break;
}

?>



--------------------
user posted image
PM   Вверх
-=Ustas=-
Дата 5.3.2006, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Лично я делаю таким образом:
Код

<?php

function GetModule($moduleDir, $nameModule)
{
    // Определяем абсолютный путь от корня
    $realPath = str_replace("\\", "/", realpath($moduleDir));
    $fileArray = array();
    // Открываем указанную директорию
    if ($link = opendir($realPath)) {
        $i = 0;
        while (($file = readdir($link)) !== FALSE) {
            if ($file != "." && $file != "..") {
                // Проверяем
                if (file_exists($realPath."/".$file) && is_file($realPath."/".$file)) {
                    $fileArray[$i] = $file;
                    $i++;
                } else {
                    continue;
                }
            } else {
                continue;
            }
        }
        closedir($link);
        clearstatcache();
    } else {
        return FALSE;
    }
    // Проверка на вхождение
    if (in_array($nameModule.".mod.php", $fileArray)) {
        // Если есть, то возвращаем полный путь для инклюда
        return $realPath."/".$nameModule.".mod.php";
    } else {
        return FALSE;
    }
}

// Например

if ($module = GetModule("mymodule", "category")) {
    // Проверяем, если такой модуль существует в указанной дире, то получаем полный путь
    // для подключения, типа C:/Server/.../mymodule/category.mod.php
    include($module);
} else {
    echo "Module not found!";
}

?>


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


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.