1 of 76

Лекция 5: �Разработка на PHP (продолжение).

ЛР 3�Формы, cookies, sessions.

Авторизация и контроль доступа.�Теоретическая часть.

intervolga.ru/school/

Ерофеев Анатолий Андреевич,

руководитель отдела разработки

2 of 76

Устройство ИНТЕРНЕТА,

HTTP, HTML, верстка

Веб-сервер�Лекции 1 и 2�ЛР 1

Работа с данными�PHP, MySQL, веб-формы, фильтрация данных�Лекции 3 и 4�ЛР 2

Работа с формами, куками, сессиями.

Авторизация, регистрация, проверка доступа�Лекции 5 и 6�ЛР 3

3 of 76

Лабораторная работа 3. Авторизация

Делаем полноценный механизм:

  • регистрации пользователя на сайте
  • аутентификации пользователя (проверка пары логин/пароль)
  • авторизации пользователя (предоставления доступа в зависимости от прав)

Делаем только базовые сценарии, но “как надо”.

Демо тут: https://volgu.ivdev.ru/LR3/

Используем формы, сессии и базу данных.

Полная постановка задачи

4 of 76

Сценарии

5 of 76

Сценарии

6 of 76

Сценарии

7 of 76

Сценарии

8 of 76

Требования

9 of 76

Как сдавать?

10 of 76

Основные блоки

По сути регистрация – просто запись пользователя в базу данных.

Аутентификация – получение данных из формы, чтение из БД и сравнение.

Авторизация – запись ID пользователя в сессию.

Выход – очистка сессии.

Потребуются

  1. Обработка HTML-формы на PHP с сохранением данных и валидацией
  2. Cookies, sessions, Построение механизма авторизации
  3. Строковые функции и Регулярные выражения

11 of 76

Антипример

В Сети полно примеров такого типа.

Они очень умно пишут, но показывают плохой незащищенный код.

Не делайте так.

Слушайте лекции.

12 of 76

Еще раз про работу с формами в PHP

13 of 76

Еще раз про работу с формами в PHP

14 of 76

Фильтрация – только GET. �Авторизация и регистрация – только POST

15 of 76

Обработка формы на сервере

16 of 76

Валидация формы

17 of 76

Еще раз про COOKIES �(не использовать для авторизации!)

18 of 76

Еще раз про COOKIES�(не использовать для авторизации!)

19 of 76

Простой счетчик на COOKIES

20 of 76

21 of 76

22 of 76

23 of 76

24 of 76

25 of 76

26 of 76

27 of 76

28 of 76

29 of 76

Еще раз про SESSION

30 of 76

Еще раз про SESSION

31 of 76

32 of 76

33 of 76

34 of 76

35 of 76

36 of 76

Аутентификация

37 of 76

Регистрация. Пароль. Хеширование

38 of 76

Регистрация. Пароль. Хеширование

39 of 76

Регистрация. Пароль. Хеширование

Вход MD5

Текст любой длины

∞ вариантов

Выход MD5

16-ичное число, 32 символа

3.4028237e+38 вариантов

40 of 76

  1. Обработка формы обратной связи с сохранением данных и валидацией�

41 of 76

Форма обратной связи

Что видите сложного?

42 of 76

Форма обратной связи

Что видите сложного?

  • email-валидация

43 of 76

Форма обратной связи

Что видите сложного?

  • email-валидация
  • файл

44 of 76

Форма обратной связи

Что видите сложного?

  • email-валидация
  • файл
  • капча

45 of 76

Форма обратной связи

Что видите сложного?

  • email-валидация
  • файл
  • капча
  • это попап-окно

46 of 76

Форма обратной связи

Теорет

47 of 76

Обработка

Настройка

На этом этапе мы создадим три переменные $my_email (почтовый ящик на который отправляются данные), $path_log (путь до файла логов) и $time_back (время возвращение пользователя обратно на сайт)

48 of 76

Обработка

Шаблоны вывода сообщений:

49 of 76

Обработка

Обработка письма:

50 of 76

Валидация

Учите

регулярные

выражения

51 of 76

Валидация email

Примеры валидных email

user.name+tag+sorting@example.com

test/test@test.com

" "@example.org

"john..doe"@example.org

mailhost!username@example.org

user%example.com@example.org

52 of 76

Обработка пришедших данных

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

53 of 76

54 of 76

55 of 76

56 of 76

  1. работа с загружаемыми файлами в PHP

57 of 76

58 of 76

59 of 76

60 of 76

61 of 76

62 of 76

63 of 76

64 of 76

65 of 76

66 of 76

67 of 76

68 of 76

  • Строковые функции и регулярные выражения

69 of 76

PHP = Hypertext preprocessor не просто так

  • addcslashes — Экранирует cтроку слешами в стиле языка C
  • addslashes — Экранирует строку с помощью слешей
  • bin2hex — Преобразует бинарные данные в шестнадцатеричное представление
  • chop — Псевдоним rtrim
  • chr — Генерирует односимвольную строку по заданному числу
  • chunk_split — Разбивает строку на фрагменты
  • convert_cyr_string — Преобразует строку из одной кириллической кодировки в другую
  • convert_uudecode — Декодирует строку из формата uuencode в обычный вид
  • convert_uuencode — Кодирует строку в формат uuencode
  • count_chars — Возвращает информацию о символах, входящих в строку
  • crc32 — Вычисляет полином CRC32 для строки
  • crypt — Необратимое хеширование строки
  • echo — Выводит одну или более строк
  • explode — Разбивает строку с помощью разделителя
  • fprintf — Записывает отформатированную строку в поток
  • get_html_translation_table — Возвращает таблицу преобразований, используемую функциями htmlspecialchars и htmlentities
  • hebrev — Преобразует текст на иврите из логической кодировки в визуальную

70 of 76

PHP = Hypertext preprocessor не просто так

  • hebrevc — Преобразует текст на иврите из логической кодировки в визуальную с преобразованием перевода строки
  • hex2bin — Преобразует шестнадцатеричные данные в двоичные
  • html_entity_decode — Преобразует HTML-сущности в соответствующие им символы
  • htmlentities — Преобразует все возможные символы в соответствующие HTML-сущности
  • htmlspecialchars_decode — Преобразует специальные HTML-сущности обратно в соответствующие символы
  • htmlspecialchars — Преобразует специальные символы в HTML-сущности
  • implode — Объединяет элементы массива в строку
  • join — Псевдоним implode
  • lcfirst — Преобразует первый символ строки в нижний регистр
  • levenshtein — Вычисляет расстояние Левенштейна между двумя строками
  • localeconv — Возвращает информацию о форматировании чисел
  • ltrim — Удаляет пробелы (или другие символы) из начала строки
  • md5_file — Возвращает MD5-хеш файла
  • md5 — Возвращает MD5-хеш строки
  • metaphone — Возвращает ключ metaphone для строки

71 of 76

PHP = Hypertext preprocessor не просто так

  • money_format — Форматирует число как денежную величину
  • nl_langinfo — Возвращает информацию о языке и локали
  • nl2br — Вставляет HTML-код разрыва строки перед каждым переводом строки
  • number_format — Форматирует число с разделением групп
  • ord — Конвертирует первый байт строки в число от 0 до 255
  • parse_str — Разбирает строку в переменные
  • print — Выводит строку
  • printf — Выводит отформатированную строку
  • quoted_printable_decode — Преобразует строку, закодированную методом quoted-printable в 8-битную строку
  • quoted_printable_encode — Преобразует 8-битную строку с помощью метода quoted-printable
  • quotemeta — Экранирует специальные символы
  • rtrim — Удаляет пробелы (или другие символы) из конца строки
  • setlocale — Устанавливает настройки локали
  • sha1_file — Возвращает SHA1-хеш файла
  • sha1 — Возвращает SHA1-хеш строки
  • similar_text — Вычисляет степень похожести двух строк

72 of 76

PHP = Hypertext preprocessor не просто так

  • soundex — Возвращает ключ soundex для строки
  • sprintf — Возвращает отформатированную строку
  • sscanf — Разбирает строку в соответствии с заданным форматом
  • str_getcsv — Выполняет разбор CSV-строки в массив
  • str_ireplace — Регистронезависимый вариант функции str_replace
  • str_pad — Дополняет строку другой строкой до заданной длины
  • str_repeat — Возвращает повторяющуюся строку
  • str_replace — Заменяет все вхождения строки поиска на строку замены
  • str_rot13 — Выполняет преобразование ROT13 над строкой
  • str_shuffle — Переставляет символы в строке случайным образом
  • str_split — Преобразует строку в массив
  • str_word_count — Возвращает информацию о словах, входящих в строку
  • strcasecmp — Бинарно-безопасное сравнение строк без учета регистра
  • strchr — Псевдоним strstr
  • strcmp — Бинарно-безопасное сравнение строк
  • strcoll — Сравнение строк с учетом текущей локали

73 of 76

PHP = Hypertext preprocessor не просто так

  • strcspn — Возвращает длину участка в начале строки, не соответствующего маске
  • strip_tags — Удаляет теги HTML и PHP из строки
  • stripcslashes — Удаляет экранирование символов, произведенное функцией addcslashes
  • stripos — Возвращает позицию первого вхождения подстроки без учета регистра
  • stripslashes — Удаляет экранирование символов
  • stristr — Регистронезависимый вариант функции strstr
  • strlen — Возвращает длину строки
  • strnatcasecmp — Сравнение строк без учета регистра с использованием алгоритма "natural order"
  • strnatcmp — Сравнение строк с использованием алгоритма "natural order"
  • strncasecmp — Бинарно-безопасное сравнение первых n символов строк без учета регистра
  • strncmp — Бинарно-безопасное сравнение первых n символов строк
  • strpbrk — Ищет в строке любой символ из заданного набора
  • strpos — Возвращает позицию первого вхождения подстроки
  • strrchr — Находит последнее вхождение символа в строке

74 of 76

PHP = Hypertext preprocessor не просто так

strrev — Переворачивает строку задом наперед

strripos — Возвращает позицию последнего вхождения подстроки без учета регистра

strrpos — Возвращает позицию последнего вхождения подстроки в строке

strspn — Возвращает длину участка в начале строки, полностью соответствующего маске

strstr — Находит первое вхождение подстроки

strtok — Разбивает строку на токены

strtolower — Преобразует строку в нижний регистр

strtoupper — Преобразует строку в верхний регистр

strtr — Преобразует заданные символы или заменяет подстроки

substr_compare — Бинарно-безопасное сравнение 2 строк со смещением, с учетом или без учета регистра

substr_count — Возвращает число вхождений подстроки

substr_replace — Заменяет часть строки

substr — Возвращает подстроку

trim — Удаляет пробелы (или другие символы) из начала и конца строки

ucfirst — Преобразует первый символ строки в верхний регистр

ucwords — Преобразует в верхний регистр первый символ каждого слова в строке

vfprintf — Записывает отформатированную строку в поток

vprintf — Выводит отформатированную строку

vsprintf — Возвращает отформатированную строку

wordwrap — Переносит строку по указанному количеству символов

75 of 76

Регулярные выражения

  • preg_filter — Производит поиск и замену по регулярному выражению
  • preg_grep — Возвращает массив вхождений, которые соответствуют шаблону
  • preg_last_error — Возвращает код ошибки выполнения последнего регулярного выражения PCRE
  • preg_match_all — Выполняет глобальный поиск шаблона в строке
  • preg_match — Выполняет проверку на соответствие регулярному выражению
  • preg_quote — Экранирует символы в регулярных выражениях
  • preg_replace_callback_array — Выполняет поиск и замену по регулярному выражению с использованием функций обратного вызова
  • preg_replace_callback — Выполняет поиск по регулярному выражению и замену с использованием callback-функции
  • preg_replace — Выполняет поиск и замену по регулярному выражению
  • preg_split — Разбивает строку по регулярному выражению

76 of 76

Задавайте вопросы.

Ерофеев Анатолий Андреевич

руководитель отдела разработки

вертикальная оцифровка бизнеса