
- •В.С. Романчик
- •Глава 2. Использование php.
- •Глава 3.
- •Введение
- •Возможности php.
- •Инструменты для разработки
- •Как php работает
- •Глава 1. Язык php Типы данных
- •Массивы и инициализация массивов
- •Объектно-ориентированное программирование в php Основные понятия ооп
- •Классы и Объекты
- •Конструкторы и деструкторы
- •Наследование классов и интерфейсов
- •Магические методы
- •Обработка ошибок
- •Ошибки php и директива error_reporting
- •Чтение и запись бинарных файлов
- •Работа с каталогами в рнр
- •MySql – сервер: бд1; бд2; бд3; бд4;
- •Язык запросов sql
- •Операция соединения.
- •Команды sql для создания баз данных и таблиц
- •Выборка данных из таблиц бд
- •Работа с MySql (сохранение данных в базе данных).
- •Работа с MySql занесение и получение данных из базы данных
- •Некоторые улучшения в организации работы с данными
- •Передача данных от клиента к серверу и от сервера клиенту
- •Клиентские методы http get, post, head
- •Обработка html-форм и передача переменных в скрипт.
- •Передача значений переменных по методу get
- •Ниже рассмотрен еще один пример передачи данных из клиентской формы на сервер по методу get
- •Передача данных на сервер по методу post
- •Php и обработка различных форм
- •Примеры обработки форм
- •Работа с e-mail
- •Отправка почты на php (Функция mail)
- •Cookies-наборы: сохраненное состояние
- •Сессии (Сеансы) Переменные сеанса
- •Отмена регистрации сеансовых переменных
- •Работа с сеансовыми переменными
- •Постоянные данные, использующие сеансы и cookie-наборы
- •Вывод графических данных с помощью рнр Основной способ создания изображений
- •Получение информации об изображении
- •Функции рисования прямых и кривых линий
- •Заливка изображений
- •Работа с палитрой изображения
- •Удаление и изменение цветов палитры
- •Создание прозрачности в изображениях
- •Рисование с помощью кистей
- •Использование специальных стилей для заливки
- •Использование шрифтов и вывод строк
- •Манипулирование и копирование изображений
- •Создаём графический информер на php
- •Слияние изображений с помощью gd
- •Включения удаленных файлов
- •Различные приложения и полезные скрипты на php
- •Пример. Определение типа и версии браузера
- •Генератор паролей на php
- •Время выполнения скрипта
- •Календарь
- •Загрузка файла от клиента на сервер
- •Работа с ftp на уровне php
- •Сбор статистики на php
- •Проверка ввода емайл
- •Чтение почты через Web-интерфейс
- •Разработка собственных листов рассылки
- •Рассылаем письма
- •Добавляем адреса в список рассылки
- •Редактирование адресов
- •Автоответчик
- •Почтовые функции в рнр
- •Задания для выполнения
- •Приложение 1. Протокол передачи гипертекстов http
- •Клиентские методы и заголовкиHttp
- •Указатель ссылки ("Referer")
- •Медиа-типы
- •Кодирование
- •Безопасность и авторизация
- •Кэширование содержимого http на стороне клиента
- •Http идентификация с php
- •Сжатие данных в протоколе http
- •Модель ajax: между загруженной в браузер страницей и сервером появляется прослойка - уровень ajax, который обеспечивает следующую последовательность выполнения приложения.
- •Класс xmlHttpRequest
- •Методы класса xmlHttpRequest
- •Свойства класса xmlHttpRequest
- •Создание экземпляра объекта xmlHttpRequest
- •Использование dom
- •Проблема с кешированием
- •Информируйте пользователя
- •Нет принципов написания кода
- •Аутентификация средствами php
- •Отделение клиентская части программы от серверной части и шаблоны
- •Использование шаблонов в php
- •Шаблоны подстановки
- •Создаем свои шаблоны в php
- •Теги, атрибуты, значения
- •Структура документа
- •Разрыв строки
- •Предварительное форматирование
- •Комментарии
- •Физическая и логическая разметка документа
- •«Физические» теги:
- •«Логические» теги:
- •Специальные символы
- •Графика
- •Формы html
- •Метатеги
- •Способы включения каскадных таблиц стилей
- •Синтаксис
- •Группирование
- •Наследование
- •Множественные классы.
- •Селекторы идентификаторов (id-селекторы).
- •Комментарии
- •Свойства шрифтов.
- •Свойства текста.
- •Представление документа в виде специальных областей – блоков
- •Отступы, поля, позиционирование.
- •Границы элементов.
- •Визуальные эффекты
- •Свойства списков
- •Свойства таблиц
- •Псевдоклассы
- •Псевдостили текста
- •Псевдоэлементы
- •Различные свойства
- •Css. Примеры
- •Типы данных
- •Ассоциированные массивы
- •Операторы
- •Подпрограммы
- •Приложение 11. Популярные веб-приложения и фреймворки
- •Фреймворки
Нет принципов написания кода
Принципы написания кода должны включать все, например, как разделить исходный код, до таких как правила именования переменных (например, префиксы и суффиксы, написание глобальных переменных заглавными буквами). Принципы определяют общепризнанные стандарты, которым следуют все участники проекта независимо от собственного стиля программирования. Они могут служить для определения спорных моментов, таких как:
Какие переменные глобальные и как они обозначаются, как глобальные.
Структура документа, обозначающая какой файл должен быть помещен в lib, а какой в src каталоги.
Стиль комментариев и их написание.
Написание документации.
Длина строки.
Принципы написания кода должны быть оформлены, как официальный документ их должен придерживаться каждый программист, задействованный в проекте. Когда проект завершен, документация сохраняется на будущее, как справочная информация.
Настоящий документ обычно достигает размера в 10-40 листов. Обратите внимание, что вам не понадобиться каждый раз писать его заново. Старый вариант всегда можно изменить по необходимости и использовать в новом проекте.
Вот пример такого документа.
Вступление
Этот документ содержит следующую инфомацию:
Файловая Структура
Заголовки и Подвалы
Документация по коду
Стиль комментирования, назначение и определение комментариев
Основные моменты разработки
Именование переменных
Файловая Структура
Много вопросов, связанных с ошибками при написании кода PHP рассмотрены в книге
Стерлинга Хьюза. (Sterling Hughes) - "Настольная книга программиста PHP" (The PHP Developer's Cookbook), была издана в октябре 2000 года издательством "Sams publishing".
Еще несколько полезных правил:
Не стоит тратить время на придумывание супер-хитрых алгоритмов. Время программиста стоит дороже времени этих железок.
Пишите скрипт так, как будто завтра Вам придется его дорабатывать. Старайтесь продумывать его так, чтобы его было легко масштабировать
Вопросы защиты данных
Процедура входа пользователя в систему делится на три части: идентификация; аутентификация; предоставление прав доступа.
Идентификация – это заявление пользователя о собственном статусе. Информация, которую пользователь предъявил при идентификации, требует подтверждения в системе аутентификации. Пользователи проверяются по одному из трёх параметров аутентификации: по тому, что они знают, чем владеют или что из себя представляют. Наиболее часто в WEB используется метод ''что они знают''. При первой регистрации пользователю назначается пароль, который он должен помнить и держать в секрете. Аутентификация заключается в подтверждении личности пользователя паролем. Если аутентификация прошла успешно, система завершает вход пользователя, связывая личность пользователя и данные управления доступом с пользовательским сеансом. Система может устанавливать различные права доступа для различных пользователей.
Аутентификация средствами php
PHP предоставляет средства реализации аутентификации. Чтобы средства аутентификации, предоставляемые PHP, работали, требуются функции управления сеансом (сессии). Как только один из старых пользователей входит в систему, возникает необходимость восстановить соответствующую информацию о состоянии, используя множественные запросы. Вы можете написать свою собственную библиотеку аутентификации, либо воспользоваться средствами библиотеки PHPLib.
<?php //php432
if(!isset($PHP_AUTH_USER))
{
Header("WWW-Authenticate: Basic realm=\"My Realm\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Сообщение посылаемое пользователю при нажатии кнопки Cancel \n";
exit; }
else
{
echo "Привет $PHP_AUTH_USER.<P>";
echo "Вы ввели $PHP_AUTH_PW , что случайно совпадает с Вашим паролем.<P>";
}
?>
При разработке приложения внимательно изучите все места, где пользовательская ошибка может вскрыть брешь в безопасности. Перечислим наиболее распространённые "дыры", позволяющие искажать данные:
Системные вызовы. Каждый раз нужно убедиться, сто пользователь отправляет вам "безопасные" данные для системного вызова. НИКОГДА НЕ ДОВЕРЯЙТЕ ДАННЫМ, ПОЛУЧЕННЫМ ОТ ПОЛЬЗОВАТЕЛЯ. И ПРЕЖДЕ ЧЕМ ПОДСТАВИТЬ ИХ В СИСТЕМНЫЙ ВЫЗОВ ПРОВЕРЬТЕ ИХ.
Регистрация пользователей. Если вы желаете получить корректные результаты, обзательно проверяйте полученные данные, причём, лучше если проверка будет состоять из нескольких этапов. Прежде всего, это проверка адреса электронной почты: убедитесь, что пользователь предоставил вам работающий аккаунт. Кроме того, стоит убедиться, что указанный возраст находится в определённых пределах.
Приём номеров кредитных карточек. Некоторые программисты ограничиваются самыми простыми алгоритмами; их легко обмануть. Существуют крупные специализированные организации для проверки кредитных карточек; рекомендуем прибегать к их помощи или ресурсам и только потом решать, принята карточка или нет. НИКОГДА НЕ ПОЛАГАЙТЕСЬ ТОЛЬКО НА АЛГОРИТМЫ.
Безопасность системных вызовов.
Если возникает необходимость поместить полученные от пользователя данные в системный вызов, обязательно проверьте и перепроверьте их. Убедитесь, что данные, которые пользователь предоставил системе, не содержат "опасных" элементов и не взломают систему нежелательными командами. Для этого PHP предлагает специальную функцию EscapeShellCmd().
Каждый раз при системном вызове с потенциально небезопасными данными, дезактивируйте их с помощью EscapeShellCmd():
Примечание: дезактивация проходит путём подстановки бэкслэша ("\") перед потенциально небезопасными для системы символами (а именно: #&;?'\"|*?~<>^()[]{}$\\\x0A\xFF).
<html>
<head>
<title>Поиск аккаунта</title>
</head>
<body>
<h1>Поиск аккаунта</h1>
<?php
if ($name) {
system (EscapeShellCmd ("lookup $name"));
print "<br>\n\n";
}
?>
<form action="<?php print $PHP_SELF; ?>" method="GET">
Введите аккаунт для поиска:
<input type="text" name="name">
<input type="submit" value="Найти аккаунт">
</form>
</body>
</html>
Примечание: хотя EscapeShellCmd() - функция чрезвычайно полезная, когда вам нужно убедиться в безопасности полученных данных, всегда стоит проводить специальные проверки в зависимости от вида данных. EscapeShellCmd() не проверит данные на корректность, она лишь предотвратит неавторизованные действия пользователя.
Усиленная проверка данных
Как правило, лучше проверять строку на наличие допустимых символов, нежели на отсутствие недопустимых. Например, проверить, что переменная $name содержит только буквенные символы. При этом новые пути проникновения в систему имеют меньше шансов просочиться через ваш фильтр.
Проверка адресов электронной почты
Один из самых распространённых видов проверки данных - это валидация адреса электронной почты. Большинство новичков ограничиваются лишь фильтром из регулярных выражений, взятым с какого-нибудь кладбища бесплатных скриптов. Но одних регулярных выражений недостаточно, если вы претендуете на получение действительно корректных результатов. Для большей безопасности вы можете применить ещё парочку методов:
проверка соединения
интерактивная проверка
Проверка соединения
Один из способов проверки аккаунта на достоверность без привлечения самого пользователя – это попробовать открыть соединение с сервером, указанным в полученном адресе и проверить наличие аккаунта на данном сервере. Данный метод работает медленнее, чем регулярные выражения. Почтовый сервер пользователя может временно не работать, при этом рабочий адрес будет восприниматься как некорректный.
Интерактивная проверка
Другой способ проверки - выслать на указанный адрес специальный ключ и попросить пользователя ввести этот ключ, чтобы продолжить процедуру регистрации. Данный метод позволяет проверить не только существование адреса, но и наличие у пользователя права доступа к нему.
Как и любой другой, этот способ не даёт стопроцентной гарантии надёжности. Пользователь может создать временный аккаунт, а потом дать его при регистрации.
Приложение 6. Скрипты и шаблоны