Как сделать выпадающее меню в php. §2

Меню сайта на php, который управляется php скриптами имеет свои особенности. Это не просто абсолютные либо относительные ссылки, хотя это вполне может быть и так, а, как правило, динамически формируемые блоки ссылок боковых панелей с разделами и подразделами и блоки ссылок с самих внутренних страниц сайта. Динамически формируемое меню очень удобно, потому, как его можно вставлять в любое место сайта и, что самое важное в нужное время. Тоесть при переходе в разные разделы и подразделы можно динамически разворачивать и разные блоки меню. Причем они могут быть разные не только по содержанию, но и по форме и оформлению. В статическом сайте тоже вполне можно проделывать такие финты, но это будет стоить дополнительных файлов шаблона и еще массу всяких ухищрений. В то время, как сайт написанный на php ничего этого не требует. Шаблон останется, как и был. Всем будет управлять один или несколько простых php скриптов.

Для того, чтобы убедиться в этом, достаточно написать php скрипт для динамического формирования меню, например, первой рубрики и заставить его развернуть меню этой рубрики через уже написанный ранее скрипт . Остальные рубрики можно будет сформировать подобным образом. Причем код самого скрипта при этом мало чем практически не изменится. Меняться будет только текстовый файл, который будет определять названия ссылок и сами ссылки. Код такого скрипта приведен ниже по тексту.

// Формирователь меню
$menu = @file($rubric1_menu);
$lines = count($menu);
for ($i = 0; $i < $lines; $i++)
{
list($menu_link,$menu_name,$menu_title)=explode("::", $menu[$i]);
if($page == rub1_part1 and $i == 0) {$refcolor = "style="color:#cc0000"";}
elseif($page == rub1_part2 and $i == 1) {$refcolor = "style="color:#cc0000"";}
elseif($page == rub1_part3 and $i == 2) {$refcolor = "style="color:#cc0000"";}
else {$refcolor = "";}
$rubric1.="

  • ".$menu_name."
  • ";
    }
    ?>

    Для того, чтобы такой скрипт работал необходим текстовый файл в котором будут храниться названия ссылок меню, сами ссылки и их title. Создать такой файл несложно, достаточно выполнить из главного меню программы Dreamweaver команду File −> New, создать новый html документ, как было описано ранее, проверить и если необходимо изменить кодировку нового файла на UTF-8, а затем сохранить его под именем rubric1.dat в предварительно созданной для него папке data. Полный путь к этому файлу будет D:/Mysitephp/data/rubric1.dat. Содержимое файла, приведенное ниже, это сами ссылки, их названия и их title (подсказки). Кроме, для того, чтобы запустить данный скрипт в работу, его необходимо подключить с помощью функции include() в шаблонизаторе main.php.

    Rub1_part1::Раздел 1::Раздел 1 рубрики 1::
    rub1_part2::Раздел 2::Раздел 2 рубрики 1::
    rub1_part3::Раздел 3::Раздел 3 рубрики 1::

    Кроме этого необходимо также создать небольшой скрипт с установками, в котором будут храниться полный адрес сайта, пути к папкам страниц и мета описаний сайта, пути к файлам меню сайта и подключить его с помощью функции include() в шаблонизаторе main.php. Для этого необходимо создать новый php файл, и сохранить его под именем например setings.php в папке php. Полный путь к файлу будет D:/Mysitephp/php/setings.php, а его содержимое приведено ниже.

    # папка с html документами
    $doctemplates = "templates";
    # полный путь до директории скрипта
    $turl="http://mysitephp.ru";
    # база с данными
    $rubric1_menu = "data/rubric1.dat";
    ?>

    Как работает php скрипт формирования меню? Сначала в переменную $menu с помощью функции file() помещается содержимое текстового файла rubric1.dat. Затем функция count() подсчитывает количество строк в текстовом файле и функциями list() и explode() в цикле разворачивается само меню, где методом склеивания строк (операция точка . ) формируются стороки ссылок с их названиями и титлами, которое затем помещается в переменную $rubric1. Далее скрипт шаблонизатора, куда скрипт меню подключен функцией include() , перемещает содержимое переменной $rubric1 в нужное место сайта с помощью уже описанной ранее функции repl () .

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

    Далее можно проект обновленный скриптом формирования меню. Скачать обновленный проект можно также на странице, которая откроется после оформления и активизации бесплатной подписки на панели справа. Адрес страницы необходимо сохранить. Именно на этой странице в дальнейшем будут появляться ссылки на скачивание обновлений проекта, различных полезных скриптов, программ, уроков и видеоуроков по схемотехнике, программированию и сайтостроению для новичков .

    Скачанный обновленный новыми скриптами проект php сайта теперь можно сравнить с тем, что получилось в результате выше описанных действий. Далее, дабы исключить разночтения полезно будет полностью заменить проект на скачанный, выполнить операцию , запустить сервер Denwer, набрать в окне браузера mysitephp.ru и просмотреть, что из этого получилось. В левой верхней части шаблона должно развернуться меню первого раздела, как показано на картинке ниже.

    Перейти и растаять в своей любимой социалке

    Апр 23 2017

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

    Чем они удобнее обычных HTML-тегов?

    Ну, допустим, наш сайт имеет 100 страниц, на каждой из которых имеется одно и то же меню. И вдруг нам понадобилось изменить пункты меню. Используя только HTML, нам придётся делать правки на 100 страницах сайта, это очень много. Так вот на помощь в таких ситуациях к нам приходит PHP. Достаточно будет поменять пункты меню всего лишь один раз в одном файле.

    А теперь поехали.

    На локальном хостинге в папке “domains создаём папку под названием “array - menu . local ”.

    В этой папке создаём четыре файла: index . php , about . php , contact . php и menu . php .

    !!! Синтаксис файлов должен быть PHP .

    В файле index.php пишем простой HTML каркас.




    charset ="utf-8" >



    Главная


    include ("menu.php" );
    ?>

    Копируем этот код в файлы about.php и contact.php. Меняем только названия страниц в теге

    .

    Пишем код для меню.

    В файле menu.php пишем ассоциативный массив.

    $menu = array (
    "index"=> "index.php",
    "about"=> "about.php",
    "contacts"=> "contact.php"
    );
    ?>

    Ниже с помощью тегов HTML пишем меню.

    В браузере мы увидим обычное меню в виде списка.

    Кликая на любом пункте меню мы перейдём на соответствующую страницу, меню при этом будет на всех страницах.

    Теперь усложним задачу. Всё удаляем из файла menu.php и...

    Пишем многомерный массив.




    charset ="utf-8" >
    <span>Использование массива для вывода меню на сайте. </span>


    $menu = array (
    array ("link"=> "Главная", "href"=> "index.php" ),
    array ("link"=> "О нас", "href"=> "about.php" ),
    array ("link"=> "Контакты", "href"=> "contact.php" )
    );
    ?>



    И на последнем этапе...

    Отрисовываем меню с помощью цикла foreach .

    Удаляем из файла menu.php список

      и вместо него пишем следующий код.

      echo "

        " ;
        foreach ($menu as $item ){
        echo "
      • {$item }
      • " ;
        }

        В браузере увидим тот же результат.

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

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

        Как это можно реализовать на PHP? Очень просто! Например, у нас есть файл index.php, который в зависимости от выбранного раздела в выпадающем списке, должен отображать соответствующий контент на странице. Реализуется это следующим образом:

        1. Создаем файлы в формате.html, которые и будут содержать в себе необходимый для вывода контент.

        2. Создаем (пишем) в скрипте index.php необходимые условия, для вывода соответствующей информации.

        3. Рассматриваем созданный скрипт с позиции безопасности выполняемого сценария.

        Ну, вроде, как с теорией закончил, переходим к практике. Сначала создаем статические страницы в формате .html , которые и будут содержать необходимую информацию. Там можно написать все, что душе угодно:) В итоге у нас должно получиться, как минимум два файла first.html и second.html , соответственно потом их можно будет сделать сколько угодно, поняв основной алгоритм работы кода.

        Для вывода выпадающего списка в файле index.php создаем html форму, и ниже пишем PHP скрипт такого содержания:



        Menu PHP


        Выпадающее меню на PHP












        if (isset ($_GET ["where" ]))
        {
        if ($_GET ["where" ]==1 )
        $file = "first.html" ;
        if ($_GET ["where" ]==2 )
        $file = "second.html" ;
        include ($file );
        }
        ?>


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

        Уязвимость данного скрипта заключается в том, что переменная $file остается не инициализирована, и в этом случае значение автоматически созданной переменной попадает сразу в функцию include , а она в свою очередь успешно ее (переменную) подключает и отображает на экране. И это может быть не только файл конфигурации .htaccess . Для того, что-бы взломать данный сценарий, достаточно параметру where передать не предусмотренное кодом значение, ну например 3. А так, как это значение не предусмотрено сценарием, то просто переменная $file не пройдет инициализацию. Поэтому, ей можно будет задать произвольное значение через строку URL.

        http://localhost/index.php?where=3&file=.htaccess

        Но это так, небольшое отступление от темы. 😀

        Вариант решения данной проблемы достаточно прост, переменную $file просто необходимо инициализировать до начала использования, т. е. присвоить ей значение по умолчанию.

        Здесь, если параметр where передан скрипту, то переменная будет инициализирована корректно, иначе просто окажется пустой. Вот такое получилось [безопасное] выпадающее меню на PHP.

        P.S. Создавая сценарии необходимо учитывать и соответственно исключать все возможные векторы атак. Только так можно создать проект, который будет отвечать правилам безопасности и востребован заказчиком. До новых встреч!

        Запустите скаченный файл двойным кликом (нужно иметь виртуальную машину ).

        3. Анонимность при проверке сайта на SQL-инъекции

        Настройка Tor и Privoxy в Kali Linux

        [Раздел в разработке]

        Настройка Tor и Privoxy в Windows

        [Раздел в разработке]

        Настройки работы через прокси в jSQL Injection

        [Раздел в разработке]

        4. Проверка сайта на SQL-инъекции с jSQL Injection

        Работа с программой крайне проста. Достаточно ввести адрес сайта и нажать ENTER.

        На следующем скриншоте видно, что сайт уязвим сразу к трём видам SQL-инъекций (информация о них указана в правом нижнем углу). Кликая на названия инъекций можно переключить используемый метод:

        Также нам уже выведены имеющиеся базы данных.

        Можно посмотреть содержимое каждой таблицы:

        Обычно, самым интересным в таблицах являются учётные данные администратора.

        Если вам повезло и вы нашли данные администратора — то радоваться рано. Нужно ещё найти админку, куда эти данные вводить.

        5. Поиск админок с jSQL Injection

        Для этого переходите на следующую вкладку. Здесь нас встречает список возможных адресов. Можете выбрать одну или несколько страниц для проверки:

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

        К сожалению, нерадивых программистов, которые хранят пароли в открытом виде, не очень много. Довольно часто в строке пароля мы видим что-нибудь вроде

        8743b52063cd84097a65d1633f5c74f5

        Это хеш. Расшифровать его можно брутфорсом. И… jSQL Injection имеет встроенный брутфорсер.

        6. Брутфорсинг хешей с помощью jSQL Injection

        Несомненным удобство является то, что не нужно искать другие программы. Здесь имеется поддержка множества самых популярных хешей.

        Это не самый оптимальный вариант. Для того, чтобы стать гуру в расшифровке хешей, рекомендуется Книга « » на русском языке.

        Но, конечно, когда под рукой нет другой программы или нет времени на изучение, jSQL Injection со встроенной функцией брут-форса придётся очень кстати.

        Присутствуют настройки: можно задать какие символы входят в пароль, диапазон длины пароля.

        7. Операции с файлами после обнаружения SQL-инъекций

        Кроме операций с базами данных — их чтение и модификация, в случае обнаружения SQL-инъекций возможно выполнение следующих файловых операций:

        • чтение файлов на сервере
        • выгрузка новых файлов на сервер
        • выгрузка шеллов на сервер

        И всё это реализовано в jSQL Injection!

        Есть ограничения — у SQL-сервера должны быть файловые привилегии. У разумных системных администраторов они отключены и доступа к файловой системе получить не удастся.

        Наличие файловых привилегий достаточно просто проверить. Перейдите в одну из вкладок (чтение файлов, создание шелла, закачка нового файла) и попытайтесь выполнить одну из указанных операций.

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

        Посмотрите на следующий скриншот:

        На любую попытку операции с файлом нам отвечают: No FILE privilege (нет файловых привелегий). И ничего здесь поделать нельзя.

        Если вместо этого у вас другая ошибка:

        Problem writing into [название_каталога]

        Это означает, что вы неправильно указали абсолютный путь, в который нужно записывать файл.

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

        Такая запись (строка Win64 ) даёт основание нам предположить, что мы имеем дело с ОС Windows:

        Keep-Alive: timeout=5, max=99 Server: Apache/2.4.17 (Win64) PHP/7.0.0RC6 Connection: Keep-Alive Method: HTTP/1.1 200 OK Content-Length: 353 Date: Fri, 11 Dec 2015 11:48:31 GMT X-Powered-By: PHP/7.0.0RC6 Content-Type: text/html; charset=UTF-8

        Здесь у нас какой-то из Unix (*BSD, Linux):

        Transfer-Encoding: chunked Date: Fri, 11 Dec 2015 11:57:02 GMT Method: HTTP/1.1 200 OK Keep-Alive: timeout=3, max=100 Connection: keep-alive Content-Type: text/html X-Powered-By: PHP/5.3.29 Server: Apache/2.2.31 (Unix)

        А здесь у нас CentOS:

        Method: HTTP/1.1 200 OK Expires: Thu, 19 Nov 1981 08:52:00 GMT Set-Cookie: PHPSESSID=9p60gtunrv7g41iurr814h9rd0; path=/ Connection: keep-alive X-Cache-Lookup: MISS from t1.hoster.ru:6666 Server: Apache/2.2.15 (CentOS) X-Powered-By: PHP/5.4.37 X-Cache: MISS from t1.hoster.ru Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Date: Fri, 11 Dec 2015 12:08:54 GMT Transfer-Encoding: chunked Content-Type: text/html; charset=WINDOWS-1251

        В Windows типичной папкой для сайтов является C:\Server\data\htdocs\ . Но, на самом деле, если кто-то «додумался» делать сервер на Windows, то, весьма вероятно, этот человек ничего не слышал о привилегиях. Поэтому начинать попытки стоит прямо с каталога C:/Windows/:

        Как видим, всё прошло прекрасно с первого раза.

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

        8. Массовая проверка сайтов на SQL-инъекции

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

        Вывод по jSQL Injection

        jSQL Injection хороший, мощный инструмент для поиска и последующего использования найденных на сайтах SQL-инъекций. Его несомненные плюсы: простота использования, встроенные сопутствующие функции. jSQL Injection может стать лучшим другом новичка при анализе веб-сайтов.

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

        Программой jSQL Injection пользоваться значительно удобнее чем sqlmap . Но sqlmap поддерживает больше видов SQL-инъекций, имеет опции для работы с файловыми файерволами и некоторые другие функции.

        Итог: jSQL Injection — лучший друг начинающего хакера.

        Справку по данной программе в Энциклопедии Kali Linux вы найдёте на этой странице: http://kali.tools/?p=706