Помощь в написании студенческих работ
Антистрессовый сервис

WEB-интерфейс управления пользователями прокси-сервера

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

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

WEB-интерфейс управления пользователями прокси-сервера (реферат, курсовая, диплом, контрольная)

WEB — ИНТЕРФЕЙС УПРАВЛЕНИЯ ПОЛЬЗОВАТЕЛЯМИ ПРОКСИ-СЕРВЕРА

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

Прокси-сервер — служба в компьютерных сетях, позволяющая клиентам выполнять косвенные запросы к другим сетевым службам. Сначала клиент подключается к прокси-серверу и запрашивает какой-либо ресурс, расположенный на другом сервере. Затем прокси-сервер либо подключается к указанному серверу и получает ресурс у него, либо возвращает ресурс из собственного кэша (в случаях, если прокси имеет свой кэш).

Существует несколько прокси-серверов, которые различаются по своему функционалу и назначению. Особый интерес представляет прокси-сервер SQUID. Его основными преимуществами являются:

· богатая функциональность;

· бесплатность, открытый исходный код;

· проксирование и кэширование большого числа протоколов, таких как HTTP, FTP и других;

· поддержка прозрачного проксирования;

· гибкая система контроля доступа пользователей.

Одним из основных недостатков прокси-сервера SQUID является то, что он не имеет встроенных утилит для анализа и визуализации статистики пользователей. Вся статистика пользователей записывается в так называемый лог-файл, но его анализ вручную достаточно сложен. Целью данной работы является создание системы для работы со статистикой пользователей, которая представляет собой средства для сбора и визуализации статистики пользователей и использует для этого web-интерфейс. Это должно во многом упростить работу администраторов, использующих прокси-сервер SQUID.

1. Постановка задачи

1.1 Поставленные цели

Основной задачей данной работы стало создание системы управления пользователями прокси-сервера SQUID. Данная система должна реализовывать следующую функциональность:

· Модуль по работе с пользователями должен реализовывать функции по добавлению пользователей, а также управлению их привилегиями в системе и ограничению доступа тем, кто злоупотребляет доступом в Интернет;

· Модуль по работе с пользовательской статистикой должен реализовывать функции по сбору пользовательской статистики, учету трафика пользователя, а также визуализации статистики с возможностью сортировки и фильтрации статистики по нескольким критериям;

· Административный модуль должен реализовывать функции по управлению квотами на трафик, блокированию и разблокированию пользователей, а также сбору статистики для прокси-сервера в целом.

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

1.2 Выбор средств реализации

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

· операционная система Ubuntu 10.04 с ядром Linux 2.6.32.22. Выбор данного дистрибутива был связан с тем, что Ubuntu имеет достаточно широкую поддержку сообщества, подробную документацию и относительную простоту использования, перед другими дистрибутивами;

· прокси-сервер SQUID версии 2.7 является на данный момент последней стабильной версией;

· Apache версии 2.2.15 является на данный момент последней стабильной версией web-сервера. Выбор Apache в качестве web-сервера был обусловлен тем, что он считается одним из самых надёжных и гибких в конфигурации web-серверов;

· система управления базами данных MySQL версии 5.1.43. Выбор в качестве средства хранения информации базы данных был обусловлен скоростью доступа к данным и удобством реализации доступа к ним. Для администрирования СУБД MySQL используется web-интерфейс phpmyadmin;

· скриптовый язык программирования PHP версии 5.3.2 с поддержкой консоли PHP. Выбор PHP в качестве основного языка реализации скриптов системы управления пользователями был связан с тем, что PHP имеет огромное количество функций и конструкций, что во много облегчает построение web-интерфейса;

· язык разметки HTML с использование каскадных таблиц стилей CSS как основного средства построения web-интерфейса:

· JavaScript-фреймворк jQuery версии 1.4.1 для взаимодействия с функционалом системы через технологию Ajax.

Использование данных средств реализации позволяет в полном объеме выполнить все поставленные цели.

2. Реализация поставленных целей

2.1 Подготовка прокси-сервера

прокси сервер пользователь интерфейс

2.1.1 Структура базы данных MySQL

Система управления хранит свои данные, такие как статистика пользователей, список пользователей и настройки системы, в базе данных MySQL. База данных состоит из трех таблиц:

· «defaults» хранит информацию о текущих настройках системы, таких как размер квоты на трафик и время хранения лога в базе данных;

· «users» хранит информацию о пользователях, их привилегиях в системе, а также объеме потраченного трафика;

· «log» хранит всю статистику пользователей прокси-сервера.

Таблица «defaults» имеет следующую структуру:

· «id» — идентификатор опции;

· «option» — название опции;

· «value» — значение опции.

Таблица «users» имеет следующую структуру:

· «id» — идентификатор пользователя;

· «admin» — характеризует привилегии пользователя. Если поле имеет значение «1», то пользователь имеет привилегии администратора;

· «banned» — характеризует состояние пользователя в системе. Если поле имеет значение «1», то пользователь заблокирован в системе;

· «traffic» — показывает суммарный объем трафика пользователя.

Таблица «log» имеет следующую структуру:

· «date» — дата доступа;

· «site» — имя запрашиваемого ресурса;

· «login» — имя пользователя;

· «traffic» — объем трафика.

Для создания структуры базы данных MySQL необходимо в phpmyadmin выполнить файл «squid.sql». В файле «config.php», который находится по адресу «/var/www/php/», необходимо указать настройки данных MySQL, такие как сервер и название базы данных, имя и пароль пользователя базы данных.

2.1.2 Формат файла статистики «access.log»

Прокси-сервер SQUID имеет возможность записывать все действия, совершаемые пользователями в так называемый файл лога. Для того чтобы использовать эту возможность, необходимо в файл конфигурационный файл «squid.conf», который расположен по адресу «/etc/squid/», добавить следующую строку:

access_log /var/log/squid/access.log

Это сообщит прокси-серверу SQUID о том, что необходимо вести лог и сохранять его по адресу «/var/log/squid/». В SQUID есть возможность использовать формат лога, определяемый пользователем. В системе управления пользователями используется следующий формат файла «access.log»:

· ip-адрес подключенного пользователя;

· логин аутентифицированного пользователя;

· дата и время запроса:

· метод GET или POST;

· запрашиваемый ресурс;

· версия протокола;

· код ответа сервера:

· трафик;

· код возврата прокси-сервера:

Для того чтобы прокси-сервер записывал статистику именно в таком формате, необходимо внести следующие изменения в файл конфигурации «squid.conf»:

logformat squidLog%>a -%ul [%tl] «%rm % ru % rv"%Hs % st % Ss:%Sh

access_log /var/log/squid/access.log squidLog

После изменения в конфигурации прокси-сервера SQUID необходимо выполнить команду:

squid — k reconfigure

для того чтобы обновить текущую конфигурацию.

2.1.3 Аутентификация пользователей

Все пользователи системы хранятся в базе данных MySQL. Основной проблемой на этапе аутентификации пользователей стало то, что по умолчанию прокси-сервер SQUID не поддерживает схему аутентификации пользователей, использующую базу данных MySQL. Но в прокси-сервере SQUID есть возможность подключать сторонние средства аутентификации, так называемые «помощники» аутентификации. На официальном сайте прокси-сервера доступны несколько видов таких «помощников», в том числе использующих базу данных MySQL, но они не удовлетворяют некоторым специфическим особенностям, которые необходимы в системе управления пользователями. Одной из таких особенностей, например, является запрет аутентификации пользователям, превысившим размер квоты на трафик. Решением данной проблемы стало использование собственной схемы аутентификации пользователей.

Аутентификация фактически происходит вне основного процесса SQUID. При старте прокси-сервер запускает процесс аутентификации. Этот процесс читает имена пользователей и их пароли со стандартного ввода и выдает «OK или «ERR» на стандартный вывод, если пользователь прошел или не прошел аутентификацию соответственно.

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

· считать со стандартного ввода логин и пароль пользователя (логин и пароль передаются в незашифрованном виде и разделены друг от друга пробелом);

· составить и выполнить запрос к базе данных MySQL, который проверит правильность ввода логина и пароля, а также разрешен ли доступ данного пользователя к использованию прокси-сервера;

· вывести на стандартный вывод «OK», чтобы разрешить доступ пользователю, либо «ERR», чтобы запретить.

Скрипт необходимо разместить по адресу «/usr/sbin/». Также следует внести следующие изменения в конфигурационный файл прокси-сервера «squid.conf»:

· для того чтобы сообщить прокси-серверу о том, что необходимо использовать сторонние средства аутентификации пользователей, необходимо добавить:

auth_param basic program /usr/bin/php /usr/sbin/auth.php

auth_param basic children 5

auth_param basic realm authorization required

auth_param basic credentialsttl 2 hours

· создать группу, в которую попадут пользователи в случае успешной аутентификации:

acl AuthUser proxy_auth REQUIRED

· разрешить доступ группе пользователей, успешно прошедших аутентификацию и запретить всем остальным.

http_access allow AuthUser

http_access deny all

После внесения следующих изменений в конфигурационный файл прокси-сервера в качестве программы аутентификации будет использоваться скрипт «auth.php». При попытке соединиться с сетью Интернет через прокси-сервер, пользователь получит приглашение на ввод логина и пароля. Пример такого сообщения показан на иллюстрации 1.

Иллюстрация 1

После успешной аутентификации пользователь будет автоматически перенаправлен на запрашиваемую страницу, либо в противном случае получит сообщение об ошибке аутентификации.

2.1.4 Контроль заблокированных пользователей

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

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

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

Прокси-сервер SQUID имеет возможность создавать пользовательские правила контроля доступа. За проверку, превысил ли аутентифицированный пользователь квоту на трафик, отвечает скрипт «bantest.php». Алгоритм работы скрипта состоит в следующем:

· считать имя пользователя со стандартного ввода;

· проверить в базе данных MySQL, превысил ли пользователь квоту по трафику;

· выдать на стандартный вывод «OK», если квота не превышена, или «ERR», если иначе;

Скрипт необходимо помести по адресу «/usr/sbin/». Также необходимо внести следующие изменения в конфигурационный файл прокси-сервера «squid.conf»:

· создать группу пользователей, которым разрешено продолжение сеанса. В нее пользователи попадают по правилу, определенному скриптом «bantest.php»:

external_acl_type allowed % LOGIN /usr/bin/php /usr/sbin/bantest.php

acl notbanned external allowed

· разрешить доступ аутентифицированным пользователям, которые не превысили квоту по трафику:

http_access allow notbanned AuthUser

Для того чтобы отключать пользователей, превысивших квоту, необходимо выполнять каждые несколько минут команду:

squid — k reconfigure

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

2.1.5 Скрипт «squider.php» и его возможности

Скрипт «squider.php» необходимо расположить по адресу «/usr/sbin/» и добавить в расписание на выполнение каждые несколько минут. Чем меньше временной интервал между этими выполнениями, тем быстрее можно распознать пользователей, превысивших квоту на трафик и заблокировать для них доступ в Интернет. Рекомендуется в качестве временного интервала выбрать 5 минут. Скрипт «squider.php» реализует следующий функционал:

· блокировка пользователей, которые превысили квоту на трафик, а также разрешение доступа заблокированным пользователям, если администратор увеличил квоту или произошло обнуление трафика на начало месяца;

· подсчет общего трафика пользователя;

· анализ файла статистики прокси-сервера «access.log», который находится по адресу «/var/log/ squid/», и сохранение результатов в базе данных MySQL;

· удаление из базы данных MySQL устаревшей статистики. Время хранения статистики в базе данных устанавливается администратором системы;

После выполнение скрипта необходимо сообщить прокси-серверу SQUID об обновлении конфигурации. Для этого необходимо после каждого выполнения скрипта «squider.php» выполнять команду

squid — k reconfigure

Для организации запуска скрипта каждые 5 минут можно использовать стандартный для Linux систем планировщик задач Cron. Для этого необходимо в файл конфигурации планировщика «crontab», находящийся по адресу «/etc/», добавить строки

5 * * * * proxy /usr/bin/php /usr/sbin/squider.php

5 * * * * root SQUID — k reconfigure

После всех настроек, скрипт «squider.php» будет каждые 5 минут собирать статистику о пользователях и блокировать пользователей, превысивших квоту по трафику, а также удалять из базы устаревшую статистику и обнулять трафик на начало месяца.

2.2 Построение webнтерфейса

2.2.1 Структура webнтерфейса

Для начала работы с web-интерфейсом необходимо установить и настроить web-сервер Apache. После этого следует разместить файлы web-интерфейса в корневую папку сайта, определенную web-сервером. По умолчанию данная папка находится по адресу «/var/www/». Затем необходимо через браузер зайти на сайт, адрес которого определен web-сервером.

Web-интерфейс имеет следующую структуру:

· «index.php» — главный файл системы. В нем реализованы страницы входа в систему, статистики пользователя и администрирования. После того как выполнен вход в систему, скрипт проверяет переменные сеанса и возвращает соответствующую страницу.

· «/php/loginup.php» — файл авторизации пользователей;

· «/php/config.php» — файл настройки соединения с базой данных MySQL;

· «/php/admin.php» — файл, реализующий функционал для страницы администрирования. В нем содержатся функции для сбора статистики, блокирования и разблокирования пользователей, управления привилегиями, создания новых пользователей и другие;

· «/php/user.php» — файл, реализующий функционал для страницы статистики пользователя. Содержит такие функции, как сбор статистики и подсчет трафика пользователя;

· «/php/statistic.php» — файл, реализующий функционал для сбора статистики;

· «/php/passwdgenerator.php» — генерация пароля для нового пользователя;

· «/js/jquery-1.4.1.min.js» — фреймворк jQuery;

· «/js/jquery-ui-personalized-1.5.3.packed.js» — файл jQuery UI, содержащий функционал по созданию пользовательских интерфейсов jQuery;

· «/js/ui.datepicker-ru.js» — получение диапазона дат с использованием календаря на jQuery;

· «/js/jquery-init.js» — файл инициализации jQuery, содержащий обработчики событий и реализующий загрузку php-скриптов по технологии Ajax;

· «/css/style.css» — основной стиль системы управления;

· «/css/tabs.css» — стиль вкладок для страницы администрирования;

· «/css/ui.datepicker.css» — стиль календаря на jQuery.

2.2.2 Авторизация в системе управления пользователями

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

Иллюстрация 2

Окно входа в систему управления пользователями представляет собой следующее:

1. подсказка пользователю о необходимости авторизации;

2. поле ввода логина;

3. поле ввода пароля;

4. кнопка входа в систему.

После того как логин и пароль были введены, следует нажать на кнопку «Войти». Пользователь будет перенаправлен на страницу авторизации, на которой происходит следующее:

· формируется запрос к базе данных MySQL, который выполняет проверку на корректность ввода логина и пароля, а также на то, является ли пользователь администратором или нет;

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

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

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

2.2.3 Страница статистики пользователя

После успешной авторизации в системе, пользователь, который не имеет привилегий администратора, попадает на свою страницу статистики. Она выглядит, как показано на иллюстрации 3.

Иллюстрация 3

Структура страницы статистики:

1. имя авторизованного пользователя;

2. объем потраченного трафика;

3. квота на трафик;

4. остаток трафика;

5. подсказка пользователю;

6. панель фильтрации статистики;

7. панель сортировки статистики;

8. таблица статистики;

9. суммарный трафик.

Интерес представляют панели фильтрации и сортировки статистики. Фильтрация статистики осуществляется по дате доступа к Интернет ресурсу. Она организована следующим образом:

· ввод начала и конца диапазона осуществляется при помощи календаря, реализованного на jQuery. Следует обратить внимание на то, что осуществляется проверка корректности диапазона, что исключает ошибки ввода дат;

· после того как диапазон дат введен, необходимо нажать на кнопку «>>», что повлечет за собой наступление события фильтрации;

· в файле «jquery-init.js» находиться обработчик события фильтрации, который осуществит вызов скрипта «statistic.php» с использованием технологии Ajax;

· благодаря использованию технологии Ajax произойдет обновление таблицы статистики, а не страницы в целом.

Сортировка статистики может происходить по нескольким критериям:

· возрастанию / убыванию колонки дата;

· возрастанию / убыванию колонки трафик;

Механизм сортировки полностью аналогичен механизму фильтрации. В файле «jquery-init.js» находятся обработчики событий сортировки. Эти события возникают при изменении критериев сортировки, поэтому нет необходимости использовать дополнительные кнопки.

Следует заметить, что возможно использовать сортировку совместно с фильтрацией. Это возможно благодаря тому, что обработчик события сортировки проверяет существование диапазона дат. Аналогично, обработчик события фильтрации проверяет установленные критерии сортировки.

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

2.2.4 Страница администрирования

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

· личная статистика;

· статистика пользователей;

· добавить пользователя:

· статус пользователей;

· настройки.

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

Вкладка «Статистика пользователей» отражает полную статистику пользователей прокси-сервера. Вешний вид данной вкладки показан на иллюстрации 4.

Иллюстрация 4

Структура вкладки «Статистики пользователей»:

1. панель фильтрации пользователей:

2. таблица статистики пользователей;

3. суммарный трафик пользователей;

Панель фильтрации пользователей позволяет отображать пользователей по следующим группам

· отображать всех;

· отображать заблокированных;

· отображать администраторов:

· отображать разрешенных пользователей;

В файле «jquery-init.js» находится обработчик события смены пользовательской группы, который осуществляет вызов скрипта «admin.php» с помощью технологии Ajax. При этом скрипту передается номер вкладки, что позволяет вызвать нужную функцию.

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

Добавление новых пользователей происходит на соответствующей вкладке, которая выглядит, как показано на иллюстрации 5.

Иллюстрация 5

Вкладка «Добавление пользователей» имеет следующую структуру:

1. подсказка пользователю;

2. панель добавления пользователя;

3. результат работы;

Процесс добавления новых пользователей в систему происходит по следующей схеме:

· необходимо задать имя нового пользователя, а также его привилегии в системе. Для создания пользователя с привилегиями администратора, необходимо поставить соответствующую галочку;

· после нажатия кнопки «>>», обработчик события добавления пользователя вызывает соответствующую функцию из скрипта «admin.php»;

· выполняется проверка на корректность введенного имени. Если пользователь с таким именем уже существует, то будет выведено соответствующее сообщение об ошибке;

· в случае, когда введенное имя корректно, для него генерируется пароль, состоящий из 8 символов. Для этого вызывается функция из скрипта «passwdgenerator.php»;

· все изменения сохраняются в базу данных MySQL, и пользователю сообщается об успешном выполнении скрипта.

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

Особое внимание необходимо уделить управлению статусами пользователей. Вкладка по управлению статусами выглядит, как показано на иллюстрации 6.

Иллюстрация 6

Вкладка «Статус пользователей» имеет следующую структуру:

1. подсказка пользователю;

2. статус и состояние пользователей;

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

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

3. Анализ полученных результатов

В ходе работы были разработаны скрипты, реализующие следующую функциональность:

· управление доступом пользователей к сети Интернет с использованием квот на трафик;

· сбор и анализ пользовательской статистики, хранение статистики в базе данных MySQL, удаление устаревшей статистики;

· визуализация статистики с использованием средств сортировки и фильтрации;

· управление привилегиями пользователей, а также возможность управления их текущим состоянием в системе:

· мониторинг общей статистики по прокси-серверу:

Заключение

Целью данной работы было создание механизма работы с пользователями и пользовательской статистикой для прокси-сервера SQUID. Система управления пользователями автоматизирует многие действия администратора. К ним относятся:

· сбор и анализ пользовательской статистики;

· подсчет потребления трафика;

· отключение пользователей, превысивших квоту на трафик;

· удаление устаревшей статистики;

· обнуление трафика на начало месяца.

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

Список используемой литературы

1. Бибо Б., Кац И. «jQuery. Подробное руководство по продвинутому JavaScript», Санкт-Петербург «Символ-Плюс», 2009.

2. Гутманс Э., Баккен С., Ретанс Д. «PHP5. Профессиональное программирование», Санкт-Петербург «Символ-Плюс», 2006.

3. Коггзолл Д. «PHP5. Полное руководство», Москва «Вильямс», 2006.

4. Томсон Л., Веллинг Л. «Разработка Web-приложений на PHP и MySQL», Москва «ДиаСофтЮП», 2003.

5. Мальчук Е. В. «HTML и CSS. Самоучитель», Москва «Вильямс», 2008.

Показать весь текст
Заполнить форму текущей работой