???
Математика на уровне МГУ

Показано с 1 по 25 из 54

Тема: PHP-вопрос

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Инспектор
    Регистрация
    12.08.2008
    Адрес
    Новосибирск
    Сообщений
    5,345

    Ответ: PHP-вопрос

    Цитата Сообщение от CoValent Посмотреть сообщение
    Так, краткое описание моей задачи и вывод:

    1. Есть статическая оболочка сайта-визитки, подгружаемая через 3 вызова include (грубо - "статически шапка", "статически подвал" и "динамически контент").
    2. Контент в HTML, причём имя файла значимое, а не цифровое.
    3. Исходя из вышеперечисленных условий, а также возможности инъекции черехз вызов "чего попало" любые решения этой задачи, как цифровые, так и списковые, к сожалению, абсолютно неинтересны.

    Ибо проще создать кучу контента с двумя статическими вызовами оболочки.

    Большое спасибо всем, кто потратил своё время и просветил о нежелательности использования динамического вызова!
    А зря ты так.
    Если есть куча файлов, лежащих известно где, то просто организуешь проверку папки с файлами на наличие файла с именем, поступившим через запрос. Если файл найден - выводишь, если нет - посылаешь нафиг.
    Список-то у тебя уже есть.

  2. #2
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: PHP-вопрос

    Цитата Сообщение от Mirnyi Посмотреть сообщение
    А зря ты так.
    Если есть куча файлов, лежащих известно где, то просто организуешь проверку папки с файлами на наличие файла с именем, поступившим через запрос. Если файл найден - выводишь, если нет - посылаешь нафиг.
    Список-то у тебя уже есть.
    Почему зря и откуда у меня список?...

    Сегодня содержание такое-то - а завтра хозяин попросил добавить пару html-файлов и двести фото...

    Нет, конечно, если ты всерьёз считаешь, что мне проще сделать длинный список, чем вызывать поимённо нужный файл - то я с тобой соглашусь... но чем это будет проще я пока не понимаю.
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  3. #3
    Инспектор
    Регистрация
    12.08.2008
    Адрес
    Новосибирск
    Сообщений
    5,345

    Ответ: PHP-вопрос

    Цитата Сообщение от CoValent Посмотреть сообщение
    Почему зря и откуда у меня список?...

    Сегодня содержание такое-то - а завтра хозяин попросил добавить пару html-файлов и двести фото...

    Нет, конечно, если ты всерьёз считаешь, что мне проще сделать длинный список, чем вызывать поимённо нужный файл - то я с тобой соглашусь... но чем это будет проще я пока не понимаю.
    Список у тебя на винте есть всегда.
    Можно входящую строку проверить на слеши и сделать if fileexist()
    А можно сделать list папки и сравнить поэлементно массив с входной строкой.
    И так, и так никакая инъекция не пройдёт.

  4. #4
    Мастер Аватар для DogEater
    Регистрация
    03.11.2001
    Адрес
    Подмосковье
    Возраст
    52
    Сообщений
    4,442

    Ответ: PHP-вопрос

    Цитата Сообщение от Mirnyi Посмотреть сообщение
    Список у тебя на винте есть всегда.
    Можно входящую строку проверить на слеши и сделать if fileexist()
    А можно сделать list папки и сравнить поэлементно массив с входной строкой.
    И так, и так никакая инъекция не пройдёт.
    Ну да. Цифры в полученной переменной могут быть всего лишь номером(ключом) массива из имён файлов(см glob()). Сначала отдаёшь номер элемента массива, содержащего имя файла в ссылку, а при запросе по номеру подгружаешь контент по имени из этого элемента.
    Куда уж безопаснее.
    Вот так делаем ссылку:
    Код:
    <?php
    $files=glob ($config['incpath']."/files/*jp*");
        foreach ($files as $file){
            print "<a href=".$SERVER['SCRIPT_NAME']."?id=".$id++.">Файл No $id</a>\n";
        }
    ?>
    Вот так формируем ответ:
    Напрямую снаружи ничего не берётся. Только подкидывай фалы в папку(если *nix - регистр в имени файла учитывается).
    Код:
    <?php
    $files=glob ($config['incpath']."/files/*jp*");
    if (preg_match ("/(\d+)/",$_GET['id'],$id)){
        if (is_file($files[$id[1]]))
            include($files[$id[1]].".htm");
        }
    else {
        if (is_file("1.htm"))
            include("1.htm");
    }
    ?>
    Крайний раз редактировалось DogEater; 20.03.2010 в 00:11.
    "Прежде чем открыть огонь - оглянись!"
    А.В. Ворожейкин "Сильнее смерти", стр 9.
    "<...>не нужны маркеры противника парням в военном небе Великой Отечественной.
    Послюнявили химический карандаш. Пунктиром отметили маршрут на карте. И вперёд!"
    © DEDA
    1680 x 1050 && i7 2600 (3.4Ghz) && 8 gb DDR3 (1600 Mhz) && gtx 580 && win 7 x64

  5. #5
    Инспектор
    Регистрация
    12.08.2008
    Адрес
    Новосибирск
    Сообщений
    5,345

    Ответ: PHP-вопрос

    Цитата Сообщение от DogEater Посмотреть сообщение
    Ну да. Цифры в полученной переменной могут быть всего лишь номером(ключом) массива из имён файлов(см glob()). Сначала отдаёшь номер элемента массива, содержащего имя файла в ссылку, а при запросе по номеру подгружаешь контент по имени из этого элемента.
    Куда уж безопаснее.
    Тогда массив где-то хранить надо иначе при добавлении файлов ссылки поплывут.
    Ну а как заинъектировать что-то, чего нет в нужной папке в этом случае - я не знаю. Даже если слеши не проверять - include("имяпапки\".$_GET['id'].".hml") или ругнётся или возьмёт что надо. Особенно если подпапок нет.
    Ну для пущей перестраховки - перепровериться на слеши или удалить их.

  6. #6
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: PHP-вопрос

    Цитата Сообщение от Mirnyi Посмотреть сообщение
    Список у тебя на винте есть всегда.
    Можно входящую строку проверить на слеши и сделать if fileexist()
    А можно сделать list папки и сравнить поэлементно массив с входной строкой.
    И так, и так никакая инъекция не пройдёт.
    Нах...фига столько мучиться, если простой прямой вызов гораздо меньше мучений потребует, Андрюш?...

    Тем более, что у меня из серьёзного программирования - только первое образование да HTML, и мне важнее сдать рабочий проект, чем углубиться в теоретические возможности?
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

  7. #7
    Инспектор
    Регистрация
    12.08.2008
    Адрес
    Новосибирск
    Сообщений
    5,345

    Ответ: PHP-вопрос

    Цитата Сообщение от CoValent Посмотреть сообщение
    Нах...фига столько мучиться, если простой прямой вызов гораздо меньше мучений потребует, Андрюш?...

    Тем более, что у меня из серьёзного программирования - только первое образование да HTML, и мне важнее сдать рабочий проект, чем углубиться в теоретические возможности?
    Просто, прямой вызов, как я понял, ты хочешь делать в куче файлов контента, который будет изменяться, расширяться, дополняться. И эти прямые вызовы нужно запихнуть в каждый такой файл.
    А можно, как ты вначале и собирался сделать один маленький шаблон, в котором 2 статических вызова и 1 динамический.

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

    Код:
    <?php
    include("header.htm");
    
    if !(preg_match ("/[\/]/",$_GET['id'])){
        if (is_file("folder\".$_GET['id'].".htm")){
            include("folder\".$_GET['id'].".htm");
            }
        else{
            include("folder\1.htm");
            }
        }
    else {
    
            include("folder\1.htm");
    }
    
    include("footer.htm");
    ?>
    Через ?id="file" запрашиваешь нужный файл контента из папки "folder".
    И получаешь готовую страничку.
    Инъекция при таком раскладе не грозит. Безопасность на месте, весь контент лежит в одной папке, из соображений паранойи "только для чтения".

  8. #8
    Добрый хозяин Аватар для CoValent
    Регистрация
    01.11.1997
    Адрес
    Москва, Россия
    Возраст
    57
    Сообщений
    19,336
    Images
    34

    Ответ: PHP-вопрос

    Вооот! Так я об этом и говорил, Андрей - простое решение для простых задач. Мне оно очень понравилось! (И не в последнюю очередь из-за понимания процесса... )

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

    Спасибо ещё раз!

    Нет, от работы точно надо отдыхать - а то в какой-то момент мозги кипят...
    Валентин "CoValent" Логинов

    Errare humanum est, ignoscere divinum (с) Marcus Tullius Cicero



    Правила тут, термины тут, модераторы тут.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •