Главная страница
Навигация по странице:

  • Листинг 3.9. Отредактированная форма

  • Листинг 3.10. Передача параметров методом POST

  • WEb практикум. Web'cepbep


    Скачать 4.76 Mb.
    НазваниеWeb'cepbep
    АнкорWEb практикум
    Дата22.01.2023
    Размер4.76 Mb.
    Формат файлаdocx
    Имя файлаWEB.docx
    ТипДокументы
    #898678
    страница7 из 18
    1   2   3   4   5   6   7   8   9   10   ...   18

    Param test






    form action=''param1.php" method="get">











    if (isset($_GET['where']))

    {

    if ($_GET['where']==1)

    $file = 'news/news.html';

    if ($_GET['where']==2)

    $file = 'news/download.html';

    if ($_GET['where']==3)

    $file = 'news/story.html';

    if ($_GET['where']==4)

    $file = 'news/contacts.html';

    include($file);

    }

    ?>





    Сохраните содержимое этого листинга в файле paraml.php, и если у вас есть web- сервер, где можно выполнять PHP-сценарии, попробуйте его там запустить.

    Сценарий отображает на экране выпадающий список, в котором пользователь мо­жет выбрать интересующий его раздел web-сайта: News (Новости), Download (Ска­чать), Story (Рассказы) и Contacts (Контакты). Выбранный элемент выпадающего списка передается сценарию в виде числа от 1 до 4. Получив это значение через параметр where, сценарий производит проверку: если параметр равен 1, то в пере­менную $fiie записать значение news/news.html, если параметр равен 2, то в $file попадает значение news/download.html и т. д.

    Что здесь может быть страшного? Ведь полученные от пользователя данные не ис­пользуются в функции include? На первый взгляд, ничего. А что если через пара­метр where передать число 5? Такое значение в сценарии не предусмотрено, а зна­чит, переменная $file окажется не проинициализированной. Хакеру остается толь­ко задать свое значение этой переменной через URL, чтобы автоматическая регистрация переменных создала ее за нас и получить необходимый результат.

    Если вы хотите увидеть файл /etc/passwd, то достаточно в строке URL указать:

    http://phpbook/param1.php?where=6&file=/etc/passwd.

    В параметре where я передаю несуществующее значение, а через file создаю пере­менную $file и передаю здесь нужный мне файл. Результат выполнения этого сце­нария в виде рисунка я уже приводить не буду, потому что мой файл /etc/passwd вы уже, наверное, выучили наизусть.

    Проблема решается двумя способами:

    • запретить автоматическое создание переменных. Хороший способ для начи­нающих программистов, которые не имеют привычки инициализировать пере­менные до их использования;

    • перед проверками if проинициализировать значение переменной.

    Второй способ в виде кода будет выглядеть следующим образом:


    if (isset($_GET['where']))

    {

    $file = ' '; // Инициализация if ($_GET['where']==1)

    $file = 'news/news.html';

    if ($_GET['where']==2)

    $file = 'news/download.html';

    }

    ?>

    Вот так одна строка кода может сделать ваш сценарий безопасным.

    В данном примере я упростил себе задачу, потому что содержимое формы переда­ется методом get, то есть через строку URL. Так параметры намного проще редак­тировать. А что если параметр передается методом post, то есть объявление формы выглядит следующим образом:



    После этого в коде сценария изменим все вхождения строки $_get [' where' ] на $_post [' where' ]. Теперь, если загрузить этот сценарий в браузере и выбрать какой- то раздел в выпадающем списке, результат будет передан методом post, а значит, мы его не увидим в строке URL. Как хакер будет действовать в этом случае?

    Тут есть несколько способов, и все они относительно простые. Необходимо загру­зить web-страницу в браузере и сохранить ее на локальном диске (в браузере Internet Explorer выбрать меню File (Файл) | Save As (Сохранить как)). Сохраняем и откры­ваем файл в любом текстовом редакторе, например в Блокноте. Теперь находим и редактируем форму отправки данных web-серверу (листинг 3.9).

    Листинг 3.9. Отредактированная форма











    Первое, что необходимо сделать, — подправить параметр action. Необходимо ука­зать полный URL к файлу сценария на web-сервере и добавить параметр file с не­обходимым нам файлом.

    Теперь редактируем какой-нибудь элемент списка выбора. Например, в данном случае я подправил в третьей строке строку News, указав в параметре value значе­ние 5. Теперь загружаем сохраненную и подкорректированную web-страницу с ло­кального диска в браузер, выбираем подправленный элемент списка (в данном случае News) и нажимаем кнопку Go. Наши подкорректированные параметры от­правляются на web-сервер, и он отображает заветный файл.

    Обратите внимание, что параметры форма передает двумя методами одновременно: post и get. Параметр where передается первым методом, а вот file мы добавили в URL, который указан в свойстве action формы, и он будет передан методом get.

    Можно оба параметра передавать методом post. Для этого корректируем форму отправки данных, как показано в листинге 3.10.

    Листинг 3.10. Передача параметров методом POST


    Param


    Section







    Теперь в параметре action формы указан только URL без параметра file. А вот внутри формы (вторая строка) добавлено поле ввода, значение которого бу­дет передано сценарию в качестве параметра file, а значит, будет создана соответ­ствующая переменная.

    Такой вариант может быть предпочтительнее, потому что, загружая свой сценарий, вы можете ввести в поле любую команду без вмешательства в исходный код сохра­ненного файла web-страницы.

    Второй вариант — снова использовать утилиты разработчика. Изменение содер­жимого страницы можно делать на вкладке Elements (Элементы) (рис. 3.4).

    <- -> О A Not Secure phpbook/paraml.php

    Param test

    Security Lighthouse






    1   2   3   4   5   6   7   8   9   10   ...   18


    написать администратору сайта