Опубликовано

Вышло 2-е издание книги: “C# глазами хакера”

C# глазами хакера. 2-е изд.

Подробно рассмотрены  все аспекты безопасности от теории до реальных реализаций .NET-приложений на языке C#. Рассказано, как обеспечивать безопасную регистрацию, авторизацию и поддержку сессий пользователей. Перечислены уязвимости, которые могут быть присущи веб-сайтам и Web API, описано, как хакеры могут эксплуатировать уязвимости  и как можно обеспечить безопасность приложений. Даны основы оптимизации кода для обработки максимального количества пользователей с целью экономии ресурсов серверов и денег на хостинг. Рассмотрены сетевые функции: проверка соединения, отслеживание запроса, доступ к микросервисам, работа с сокетами и др. Приведены реальные примеры атак хакеров и способы защиты от них. Во втором издании добавлены новые примеры безопасности, рассмотрены вопросы реализации технологий OAuth2 и Single Sign On.

Для веб-программистов, администраторов и специалистов по безопасности

  • Теория безопасности кода
  • Проблемы авторизации
  • Безопасность веб-приложений на реальных примерах
  • Оптимизация кода
  • Защита Web API
  • Сетевые функции
  • Реальные примеры атак хакеров и защиты от них
  • Проблемы и реализация OAuth2 и Single Sign On

Книгу “C# глазами хакера. 2-е изд.“.

Предисловие…………………………………………………………………………………………….. 7

Об авторе………………………………………………………………………………………………………………………………………. 7

О книге…………………………………………………………………………………………………………………………………………… 8

Благодарности……………………………………………………………………………………………………………………………… 8

Глава 1. Теория безопасности………………………………………………………………… 10

1.1. Комплексная защита…………………………………………………………………………………………………………… 11

1.2. Сдвиг влево………………………………………………………………………………………………………………………….. 14

1.2.1. Обучение………………………………………………………………………………………………………………………… 15

1.2.2. Сбор требований…………………………………………………………………………………………………………… 16

1.2.3. Безопасность на этапе разработки……………………………………………………………………………… 16

1.2.4. Внешние компоненты……………………………………………………………………………………………………. 17

1.2.5. Статические анализаторы кода…………………………………………………………………………………… 17

1.2.6. Динамический анализатор кода………………………………………………………………………………….. 18

1.2.7. Испытание на проникновение……………………………………………………………………………………… 18

1.2.8. Отчеты……………………………………………………………………………………………………………………………. 18

1.3. Проект OWASP…………………………………………………………………………………………………………………….. 19

1.4. Отказ в обслуживании………………………………………………………………………………………………………… 20

1.5. Управление кодом………………………………………………………………………………………………………………. 22

1.6. Стабильность кода: нулевые исключения………………………………………………………………………… 24

1.7. Исключительные ситуации………………………………………………………………………………………………… 26

1.8. Журналы ошибок и аудит………………………………………………………………………………………………….. 27

1.9. Ошибки нужно исправлять…………………………………………………………………………………………………. 29

1.10. Отгружаем легко и часто………………………………………………………………………………………………….. 35

1.10.1. Обновление базы данных…………………………………………………………………………………………… 37

1.10.2. Копирование файлов………………………………………………………………………………………………….. 38

1.10.3. Распределенное окружение……………………………………………………………………………………….. 39

1.11. Шифрование трафика……………………………………………………………………………………………………….. 40

1.12. POST или GET?………………………………………………………………………………………………………………….. 42

1.13. Ограничение времени выполнения………………………………………………………………………………….. 45

1.14. Кто проверяет данные?…………………………………………………………………………………………………….. 46

Глава 2. Аутентификация и авторизация……………………………………………….. 47

2.1. Шаблон приложения…………………………………………………………………………………………………………… 47

2.2. Регистрация пользователей……………………………………………………………………………………………….. 50

2.3. Форма регистрации…………………………………………………………………………………………………………….. 51

2.3.1. Корректные данные регистрации………………………………………………………………………………… 53

2.3.2. Email с плюсом и точкой………………………………………………………………………………………………. 57

2.4. Хранение паролей………………………………………………………………………………………………………………. 58

2.4.1. Хеширование…………………………………………………………………………………………………………………. 59

2.4.2. MD5-хеширование………………………………………………………………………………………………………… 60

2.4.3. Безопасное хеширование……………………………………………………………………………………………… 64

2.4.4. И еще немного о безопасности…………………………………………………………………………………….. 64

2.5. Создание посетителей………………………………………………………………………………………………………… 65

2.6. Captcha………………………………………………………………………………………………………………………………… 66

2.6.1. Настраиваем Google reCAPTCHA……………………………………………………………………………….. 67

2.6.2. Пример использования reCAPTCHA……………………………………………………………………………. 69

2.6.3. Отменяем капчу…………………………………………………………………………………………………………….. 72

2.7. Аутентификация………………………………………………………………………………………………………………….. 73

2.7.1. Базовая аутентификация………………………………………………………………………………………………. 73

2.7.2. Журналирование и защита от перебора…………………………………………………………………….. 75

2.7.3. Защищаемся от перебора…………………………………………………………………………………………….. 76

2.8. Запомни меня………………………………………………………………………………………………………………………. 79

2.8.1. Зашифрованный якорь………………………………………………………………………………………………….. 80

2.8.2. Опасность HttpOnly………………………………………………………………………………………………………. 83

2.8.3. Уникальные токены………………………………………………………………………………………………………. 84

2.9. Автозаполнение…………………………………………………………………………………………………………………… 87

2.10. Авторизация………………………………………………………………………………………………………………………. 87

2.11. Железобетонная проверка……………………………………………………………………………………………….. 92

2.12. Протокол OAuth………………………………………………………………………………………………………………… 93

2.12.1. Конфигурирование приложения «Яндекс» OAuth……………………………………………………. 95

2.12.2. Создаем клиента…………………………………………………………………………………………………………. 99

2.12.3. Что дальше?………………………………………………………………………………………………………………. 103

2.13. Делим авторизацию………………………………………………………………………………………………………… 103

2.14. Защита сессии…………………………………………………………………………………………………………………. 104

2.15. Многоуровневая авторизация……………………………………………………………………………………….. 105

2.16. Microsoft Identity…………………………………………………………………………………………………………….. 107

Глава 3. Безопасность .NET-приложений……………………………………………… 111

3.1. Инъекция SQL: основы……………………………………………………………………………………………………… 111

3.1.1. SQL-уязвимость в ADO.NET……………………………………………………………………………………….. 112

3.1.2. Защита от SQL-инъекции……………………………………………………………………………………………. 115

3.2. Dapper ORM………………………………………………………………………………………………………………………. 118

3.3. Entity Framework……………………………………………………………………………………………………………….. 122

3.4. Отправка электронной почты………………………………………………………………………………………….. 126

3.4.1. Очереди сообщений……………………………………………………………………………………………………. 127

3.4.2. Работа с очередью………………………………………………………………………………………………………. 129

3.4.3. Отправляем письма…………………………………………………………………………………………………….. 131

3.5. Подделка параметров………………………………………………………………………………………………………. 133

3.6. Флуд…………………………………………………………………………………………………………………………………… 140

3.7. XSS: межсайтовый скриптинг………………………………………………………………………………………….. 142

3.7.1. Защита от XSS в .NET…………………………………………………………………………………………………. 143

3.7.2. Примеры эксплуатации XSS………………………………………………………………………………………. 146

3.7.3. Типы XSS……………………………………………………………………………………………………………………… 148

3.7.4. Хранимая XSS……………………………………………………………………………………………………………… 149

3.7.5. XSS: текст внутри тега………………………………………………………………………………………………… 155

3.7.6. Скрипты……………………………………………………………………………………………………………………….. 157

3.7.7. Атака через промежуточный слой…………………………………………………………………………….. 158

3.7.8. HTML-расширения……………………………………………………………………………………………………… 159

3.7.9. Вывод из контроллера………………………………………………………………………………………………… 160

3.7.10. Эксплуатация XSS-уязвимости………………………………………………………………………………… 161

3.8. Политика безопасности контента……………………………………………………………………………………. 161

3.8.1. CORS на страже контента………………………………………………………………………………………….. 162

3.8.2. Источники загрузки…………………………………………………………………………………………………….. 162

3.8.3. Тестирование политики……………………………………………………………………………………………… 165

3.8.4. Разрешенные источники…………………………………………………………………………………………….. 168

3.9. SQL Injection: доступ к недоступному……………………………………………………………………………. 170

3.10. CSRF: межсайтовая подделка запроса…………………………………………………………………………. 172

3.11. Загрузка файлов……………………………………………………………………………………………………………… 177

3.12. Переадресация………………………………………………………………………………………………………………… 179

3.13. Защита от DoS…………………………………………………………………………………………………………………. 183

3.14. Кликджекинг……………………………………………………………………………………………………………………. 186

Глава 4. О производительности в целом……………………………………………….. 191

4.1. Основы……………………………………………………………………………………………………………………………….. 191

4.2. Когда нужно оптимизировать?………………………………………………………………………………………… 193

4.3. Оптимизация и рефакторинг…………………………………………………………………………………………….. 194

4.4. Отображение данных……………………………………………………………………………………………………….. 195

4.5. Асинхронное выполнение запросов………………………………………………………………………………… 198

4.6. Параллельное выполнение………………………………………………………………………………………………. 199

4.7. LINQ…………………………………………………………………………………………………………………………………… 200

4.8. Обновление .NET………………………………………………………………………………………………………………. 202

Глава 5. Производительность в .NET……………………………………………………. 203

5.1. Типы данных……………………………………………………………………………………………………………………… 203

5.1.1. Производительность…………………………………………………………………………………………………… 203

5.1.2. Отличие структур от классов…………………………………………………………………………………….. 205

5.1.3. Ссылки на структуры…………………………………………………………………………………………………. 210

5.2. Виртуальные методы……………………………………………………………………………………………………….. 212

5.3. Управление памятью………………………………………………………………………………………………………… 214

5.4. Закрытие соединений с базой данных……………………………………………………………………………. 217

5.5. Циклы…………………………………………………………………………………………………………………………………. 220

5.6. Строки………………………………………………………………………………………………………………………………… 221

5.7. Исключительные ситуации………………………………………………………………………………………………. 223

5.8. Странный HttpClient…………………………………………………………………………………………………………. 224

5.9. Класс ArrayPool………………………………………………………………………………………………………………… 226

5.10. Параметризованные запросы к БД……………………………………………………………………………….. 228

Глава 6. Сеть………………………………………………………………………………………… 230

6.1. Проверка соединения……………………………………………………………………………………………………….. 230

6.2. Отслеживание запроса……………………………………………………………………………………………………… 231

6.3. Класс HTTP-клиент…………………………………………………………………………………………………………… 234

6.4. Класс Uri……………………………………………………………………………………………………………………………. 235

6.5. Уровень розетки………………………………………………………………………………………………………………… 237

6.5.1. Сервер………………………………………………………………………………………………………………………….. 237

6.5.2. Клиент………………………………………………………………………………………………………………………….. 241

6.6. Доменная система имен……………………………………………………………………………………………………. 243

Глава 7. Web API………………………………………………………………………………….. 245

7.1. Пример Web API………………………………………………………………………………………………………………… 245

7.2. JWT-токены……………………………………………………………………………………………………………………….. 246

7.3. Устройство токенов………………………………………………………………………………………………………….. 253

7.4. Авторизация API……………………………………………………………………………………………………………….. 256

7.5. XSS и Web API…………………………………………………………………………………………………………………… 257

Глава 8. Трюки…………………………………………………………………………………….. 260

8.1. Кеширование…………………………………………………………………………………………………………………….. 260

8.1.1. Кеширование результата…………………………………………………………………………………………… 260

8.1.2. Кеширование статичными переменными…………………………………………………………………. 264

8.1.3. Кеширование уровня запроса……………………………………………………………………………………. 265

8.1.4. Кеширование в памяти……………………………………………………………………………………………….. 266

8.1.5. Сервер кеширования…………………………………………………………………………………………………… 268

8.1.6. Cookie в качестве кеша……………………………………………………………………………………………….. 269

8.2. Сессии………………………………………………………………………………………………………………………………… 271

8.2.1. Пишем свою сессию……………………………………………………………………………………………………. 271

8.2.2. Безопасность сессии…………………………………………………………………………………………………… 274

8.2.3. Сессия в качестве кеша………………………………………………………………………………………………. 275

8.2.4. Уничтожение сессии…………………………………………………………………………………………………… 277

8.2.5. Выход…………………………………………………………………………………………………………………………… 277

8.2.6. Кукушка для сессии……………………………………………………………………………………………………. 278

8.2.7. Преимущества и недостатки………………………………………………………………………………………. 279

8.3. Защита от множественной обработки…………………………………………………………………………….. 280

Заключение………………………………………………………………………………………….. 284

Литература…………………………………………………………………………………………… 285

Приложение. Описание файлового архива, сопровождающего книгу….. 286

Предметный указатель…………………………………………………………………………. 287

 

Опубликовано

Новинка: “Реагирование на инциденты на основе аналитических данных. 2-е издание”

Реагирование на инциденты на основе аналитических данных. 2-е издание

Книга рассматривает практические аспекты реагирования на инциденты информационной безопасности и анализа киберугроз. Подробно изложена теория исследования угроз, рассмотрены основы аналитической деятельности специалиста по информационной безопасности, описаны протоколы реагирования на инциденты на основе аналитических данных (Intelligence-Driven Incident Response, IDIR). Наглядно с практическими примерами рассматривается модель F3EAD — Поиск, Фиксация, Завершение, Эксплойт, Анализ и Распространение (Find, Fix, Finish, Exploit, Analyze, and Disseminate).  Уделено внимание стратегической аналитической деятельности и построению эффективной команды аналитиков.

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

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

Книга, состоящая из трех частей, включает в себя:

  • Основы: вы узнаете, что такое исследование киберугроз, аналитическая деятельность, процесс реагирования на инциденты и как эти компоненты работают вместе.
  • Практическое применение: вы изучите процесс реагирования на инциденты на основе аналитических данных (Intelligence-Driven Incident Response, IDIR), выполняя операции F3EAD — Поиск, Фиксация, Завершение, Эксплойт, Анализ и Распространение (Find, Fix, Finish, Exploit, Analyze, and Disseminate).
  • Направление развития: вы изучите масштабные аспекты IDIR, выходящие за рамки отдельных расследований инцидентов, включая стратегическую аналитическую деятельность и построение команды аналитиков угроз безопасности.

Книгу “Реагирование на инциденты на основе аналитических данных. 2-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Отзывы о книге……………………………………………………………………………………… 13

Предисловие ко второму изданию………………………………………………………….. 15

Предисловие к первому изданию……………………………………………………………. 18

Введение………………………………………………………………………………………………… 21

Почему мы написали эту книгу………………………………………………………………………………………………… 21

Для кого эта книга……………………………………………………………………………………………………………………… 22

Как организована эта книга……………………………………………………………………………………………………… 22

Условные обозначения, используемые в книге……………………………………………………………………….. 23

Онлайн-обучение O’Reilly…………………………………………………………………………………………………………. 23

Наши контакты………………………………………………………………………………………………………………………….. 23

Благодарности…………………………………………………………………………………………………………………………… 24

Часть I. Основы……………………………………………………………………………….. 27

Глава 1. Введение…………………………………………………………………………………… 29

Аналитическая деятельность как часть реагирования на инциденты………………………………….. 29

История разведки киберугроз………………………………………………………………………………………… 30

Первое вторжение…………………………………………………………………………………………………… 30

Разрушительные атаки………………………………………………………………………………………….. 31

Moonlight Maze……………………………………………………………………………………………………….. 32

Современная разведка киберугроз……………………………………………………………………………….. 33

Путь вперед……………………………………………………………………………………………………………………… 34

Реагирование на инциденты как часть анализа……………………………………………………………………… 34

Что такое реагирование на инциденты на основе аналитических данных?………………………… 35

Зачем нужно реагирование на инциденты на основе аналитических данных?………………….. 36

Operation SMN…………………………………………………………………………………………………………………. 36

SolarWinds……………………………………………………………………………………………………………………….. 37

Заключение………………………………………………………………………………………………………………………………… 38

Глава 2. Основы аналитической деятельности………………………………………. 40

Аналитическая деятельность и исследования………………………………………………………………………… 41

Данные в противовес аналитической деятельности………………………………………………………………. 42

Источники и методы………………………………………………………………………………………………………………….. 43

Модели……………………………………………………………………………………………………………………………………….. 46

Использование моделей для совместной работы………………………………………………………… 47

Модели процессов………………………………………………………………………………………………………….. 47

OODA……………………………………………………………………………………………………………………….. 48

Цикл аналитической деятельности………………………………………………………………………. 50

Использование цикла аналитической деятельности…………………………………………………… 55

Качества хорошей аналитической деятельности…………………………………………………………………… 57

Метод сбора……………………………………………………………………………………………………………………. 57

Дата сбора………………………………………………………………………………………………………………………. 57

Контекст………………………………………………………………………………………………………………………….. 57

Устранение предубеждений в анализе…………………………………………………………………………. 57

Уровни аналитической деятельности………………………………………………………………………………………. 58

Тактическая аналитическая деятельность…………………………………………………………………… 58

Оперативная аналитическая деятельность………………………………………………………………….. 59

Стратегическая аналитическая деятельность……………………………………………………………… 59

Уровни уверенности………………………………………………………………………………………………………………….. 60

Заключение………………………………………………………………………………………………………………………………… 61

Глава 3. Основы реагирования на инциденты……………………………………….. 62

Цикл “инцидент-реагирование”………………………………………………………………………………………………… 62

Подготовка………………………………………………………………………………………………………………………. 63

Идентификация……………………………………………………………………………………………………………….. 65

Сдерживание…………………………………………………………………………………………………………………… 66

Устранение……………………………………………………………………………………………………………………… 66

Восстановление………………………………………………………………………………………………………………. 68

Выводы……………………………………………………………………………………………………………………………. 69

Kill chain………………………………………………………………………………………………………………………………………. 71

Нацеливание…………………………………………………………………………………………………………………… 72

Разведка…………………………………………………………………………………………………………………………… 73

Жесткие и мягкие данные………………………………………………………………………………………. 73

Активные и пассивные методы сбора информации…………………………………………….. 73

Вепонизация……………………………………………………………………………………………………………………. 74

Охота за уязвимостями………………………………………………………………………………………….. 75

Создание эксплойта……………………………………………………………………………………………….. 76

Разработка импланта…………………………………………………………………………………………….. 76

Тестирование………………………………………………………………………………………………………….. 77

Разработка инфраструктуры………………………………………………………………………………… 78

Доставка………………………………………………………………………………………………………………………….. 79

Использование уязвимости……………………………………………………………………………………………. 80

Установка………………………………………………………………………………………………………………………… 81

Устойчивость системы…………………………………………………………………………………………… 81

Устойчивость сети………………………………………………………………………………………………….. 82

Управление и контроль………………………………………………………………………………………………….. 82

Действия над целью……………………………………………………………………………………………………….. 83

Пример kill chain……………………………………………………………………………………………………………… 86

Алмазная модель……………………………………………………………………………………………………………………….. 87

Базовая модель……………………………………………………………………………………………………………….. 88

Расширение модели………………………………………………………………………………………………………… 88

ATT&CK и D3FEND…………………………………………………………………………………………………………………… 89

ATT&CK………………………………………………………………………………………………………………………….. 89

D3FEND……………………………………………………………………………………………………………………………. 91

Активная защита………………………………………………………………………………………………………………………… 91

Отказ………………………………………………………………………………………………………………………………… 93

Нарушение………………………………………………………………………………………………………………………. 93

Деградация……………………………………………………………………………………………………………………… 93

Обман………………………………………………………………………………………………………………………………. 94

Уничтожение…………………………………………………………………………………………………………………… 94

F3EAD…………………………………………………………………………………………………………………………………………. 95

Поиск……………………………………………………………………………………………………………………………….. 96

Фиксация…………………………………………………………………………………………………………………………. 96

Завершение……………………………………………………………………………………………………………………… 96

Эксплойт………………………………………………………………………………………………………………………….. 96

Анализ……………………………………………………………………………………………………………………………… 97

Распространение…………………………………………………………………………………………………………….. 97

Использование F3EAD……………………………………………………………………………………………………. 98

Выбор правильной модели……………………………………………………………………………………………………….. 99

Сценарий: Road Runner…………………………………………………………………………………………………………….. 99

Заключение………………………………………………………………………………………………………………………………. 101

Часть II. Практическое применение…………………………………….. 103

Глава 4. Поиск……………………………………………………………………………………… 105

Ориентирование на субъекта…………………………………………………………………………………………………. 106

Начните с известной информации………………………………………………………………………………. 107

Полезная информация на этапе поиска……………………………………………………………………… 107

Индикаторы компрометации………………………………………………………………………………. 109

Поведение……………………………………………………………………………………………………………… 109

Использование Kill chain………………………………………………………………………………………………. 110

Road Runner: построение начальной kill chain………………………………………………….. 110

Road Runner: разработка kill chain…………………………………………………………………….. 112

Цели……………………………………………………………………………………………………………………………….. 113

Ориентирование на жертву…………………………………………………………………………………………………….. 114

Использование целеуказания, ориентированного на жертву…………………………………… 115

Связь между жертвой и инфраструктурой…………………………………………………………. 115

Связь между жертвой и возможностью………………………………………………………………. 116

Связь между жертвой и противником…………………………………………………………………. 116

Ориентация на активы…………………………………………………………………………………………………………….. 117

Использование целеуказания, ориентированного на активы…………………………………… 118

Ориентация на возможности…………………………………………………………………………………………………… 118

Использование целеуказания, ориентированного на возможности………………………… 119

Ориентация на СМИ………………………………………………………………………………………………………………… 120

Ориентация на уведомления третьих лиц……………………………………………………………………………… 121

Определение приоритетов целеуказания………………………………………………………………………………. 122

Неотложные потребности……………………………………………………………………………………………. 122

Предыдущие инциденты………………………………………………………………………………………………. 123

Критичность………………………………………………………………………………………………………………….. 123

Организация деятельности по целеуказанию……………………………………………………………………….. 124

Жесткие зацепки…………………………………………………………………………………………………………… 124

Мягкие зацепки……………………………………………………………………………………………………………… 124

Группировка связанных зацепок………………………………………………………………………………… 124

Хранение и документирование зацепок……………………………………………………………………… 125

Процесс запроса информации………………………………………………………………………………………………… 125

Заключение………………………………………………………………………………………………………………………………. 126

Глава 5. Фиксация……………………………………………………………………………….. 127

Обнаружение вторжений………………………………………………………………………………………………………… 128

Сетевое оповещение…………………………………………………………………………………………………….. 128

Оповещение при проведении разведки………………………………………………………………. 129

Оповещение на этапе доставки…………………………………………………………………………… 130

Оповещение об управлении и контроле…………………………………………………………….. 131

Оповещение о воздействии………………………………………………………………………………….. 134

Системное оповещение………………………………………………………………………………………………… 135

Предупреждение об эксплуатации уязвимости…………………………………………………. 136

Оповещение при установке…………………………………………………………………………………. 136

Оповещение при воздействии……………………………………………………………………………… 137

Фиксация Road Runner…………………………………………………………………………………………………. 138

Сетевая активность………………………………………………………………………………………………. 138

Расследование вторжений………………………………………………………………………………………………………. 139

Анализ сети…………………………………………………………………………………………………………………… 140

Анализ трафика……………………………………………………………………………………………………. 140

Анализ на основе сигнатур…………………………………………………………………………………. 143

Анализ всего содержимого………………………………………………………………………………….. 145

Узнайте больше……………………………………………………………………………………………………. 147

Реагирование в реальном времени……………………………………………………………………………… 147

Анализ памяти………………………………………………………………………………………………………………. 149

Анализ диска…………………………………………………………………………………………………………………. 150

Аналитическая деятельность при анализе дисков……………………………………………. 151

Сбор данных при анализе дисков………………………………………………………………………. 151

Обнаружение и реагирование на уровне предприятия…………………………………………….. 151

Анализ вредоносного ПО…………………………………………………………………………………………….. 153

Базовый статический анализ………………………………………………………………………………. 153

Базовый динамический анализ…………………………………………………………………………… 154

Продвинутый статический анализ……………………………………………………………………… 155

Применение аналитической деятельности для анализа вредоносного ПО…….. 156

Сбор данных при анализе вредоносного ПО…………………………………………………….. 156

Узнайте больше об анализе вредоносного ПО………………………………………………….. 157

Обзор…………………………………………………………………………………………………………………………………………. 157

Охота………………………………………………………………………………………………………………………………………… 158

Разработка гипотез………………………………………………………………………………………………………. 158

Проверка гипотез………………………………………………………………………………………………………….. 159

Заключение………………………………………………………………………………………………………………………………. 159

Глава 6. Завершение…………………………………………………………………………….. 160

Завершить — не значит взламывать в ответ…………………………………………………………………………. 160

Этапы “Завершения”……………………………………………………………………………………………………………….. 161

Смягчение последствий……………………………………………………………………………………………….. 162

Смягчение последствий доставки……………………………………………………………………….. 162

Смягчение последствий управления и контроля……………………………………………….. 162

Смягчение последствий действий над целью…………………………………………………….. 163

Смягчение последствий Road Runner…………………………………………………………………. 164

Исправление………………………………………………………………………………………………………………….. 165

Исправление последствий эксплуатации уязвимости………………………………………. 165

Исправление последствий установки…………………………………………………………………. 166

Исправление действий над целью………………………………………………………………………. 167

Исправление последствий Road Runner…………………………………………………………….. 168

Перестройка архитектуры…………………………………………………………………………………………… 169

Перестройка архитектуры в связи с Road Runner…………………………………………….. 169

Принятие мер……………………………………………………………………………………………………………………………. 170

Отказ………………………………………………………………………………………………………………………………. 170

Нарушение……………………………………………………………………………………………………………………. 171

Деградация……………………………………………………………………………………………………………………. 172

Обман…………………………………………………………………………………………………………………………….. 172

Уничтожение…………………………………………………………………………………………………………………. 173

Систематизация данных об инцидентах……………………………………………………………………………….. 173

Инструменты для отслеживания действий…………………………………………………………………. 174

Личные заметки……………………………………………………………………………………………………. 174

Электронная таблица судьбы…………………………………………………………………………….. 175

Сторонние, нецелевые решения………………………………………………………………………….. 176

Специально разработанные инструменты………………………………………………………………… 176

Оценка ущерба…………………………………………………………………………………………………………………………. 178

Жизненный цикл отслеживания……………………………………………………………………………………………… 178

Создание……………………………………………………………………………………………………………………….. 178

Тестирование………………………………………………………………………………………………………………… 179

Развертывание………………………………………………………………………………………………………………. 179

Доработка……………………………………………………………………………………………………………………… 179

Вывод из эксплуатации……………………………………………………………………………………………….. 180

Заключение………………………………………………………………………………………………………………………………. 180

Глава 7. Эксплойт………………………………………………………………………………… 181

Тактические и стратегические петли OODA………………………………………………………………………….. 182

Как быть с этапом “Эксплойт”?……………………………………………………………………………………………… 183

Сбор информации……………………………………………………………………………………………………………………. 185

Цели сбора информации………………………………………………………………………………………………. 186

Использование предыдущих инцидентов…………………………………………………………………… 186

Сбор внешней информации (или проведение обзора литературы)…………………………. 187

Извлечение и хранение данных об угрозах…………………………………………………………………………… 188

Стандарты хранения данных об угрозах…………………………………………………………………… 188

Стандарты и форматы данных для индикаторов……………………………………………………… 188

Набор OASIS (он же STIX/TAXII)………………………………………………………………………. 189

Рабочая группа MILE………………………………………………………………………………………….. 190

OpenIOC………………………………………………………………………………………………………………… 191

Стандарты и форматы данных для стратегической информации…………………………… 192

ATT&CK………………………………………………………………………………………………………………… 192

VERIS…………………………………………………………………………………………………………………….. 193

CAPEC…………………………………………………………………………………………………………………… 194

Процесс извлечения……………………………………………………………………………………………………… 194

Шаг 1: Определите свои цели……………………………………………………………………………… 194

Шаг 2: Определите свои инструменты……………………………………………………………….. 195

Шаг 3: Определите систему или процесс, который будет использоваться…….. 195

Шаг 4: Запуск и итерации……………………………………………………………………………………. 196

Управление информацией………………………………………………………………………………………………………. 196

Платформы анализа угроз…………………………………………………………………………………………… 197

TIP………………………………………………………………………………………………………………………….. 198

MISP………………………………………………………………………………………………………………………. 198

CRITs…………………………………………………………………………………………………………………….. 198

YETI………………………………………………………………………………………………………………………. 198

Коммерческие решения……………………………………………………………………………………….. 199

Заключение………………………………………………………………………………………………………………………………. 199

Глава 8. Анализ……………………………………………………………………………………. 200

Основы анализа……………………………………………………………………………………………………………………….. 200

Двойственный процесс мышления………………………………………………………………………………. 201

Дедуктивные, индуктивные и абдуктивные рассуждения………………………………………… 202

Дедуктивные рассуждения………………………………………………………………………………….. 203

Индуктивные рассуждения………………………………………………………………………………….. 203

Абдуктивные рассуждения………………………………………………………………………………….. 204

Зачем рассуждать о рассуждениях?………………………………………………………………….. 205

Аналитические процессы и методы……………………………………………………………………………………….. 206

Структурированные аналитические методы (SAT)…………………………………………………… 206

Проверка ключевых предположений…………………………………………………………………. 209

Анализ конкурирующих гипотез………………………………………………………………………… 211

Создание, проверка и оценка индикаторов……………………………………………………….. 214

Контрарные методы…………………………………………………………………………………………….. 216

Колесо будущего………………………………………………………………………………………………….. 217

Анализ, ориентированный на цель……………………………………………………………………………… 217

Проведение анализа………………………………………………………………………………………………………………… 221

Что анализировать……………………………………………………………………………………………………….. 221

Обогащение данных…………………………………………………………………………………………………….. 223

Источники обогащения………………………………………………………………………………………… 223

Внутренняя информация об обогащении…………………………………………………………… 226

Использование возможностей обмена информацией………………………………………………… 227

Разработка гипотезы……………………………………………………………………………………………………. 228

Оценка ключевых предположений……………………………………………………………………………… 229

Аналитическая предвзятость………………………………………………………………………………………………….. 230

Учет предубеждений……………………………………………………………………………………………………. 231

Предвзятость подтверждения……………………………………………………………………………… 231

Предвзятость закрепления…………………………………………………………………………………… 231

Предвзятость в отношении доступности……………………………………………………………. 232

Эффект оркестра…………………………………………………………………………………………………… 232

Отзеркаливание……………………………………………………………………………………………………. 233

Суждения и выводы…………………………………………………………………………………………………………………. 233

Заключение………………………………………………………………………………………………………………………………. 234

Глава 9. Распространение…………………………………………………………………….. 236

Цели заказчиков аналитической деятельности…………………………………………………………………….. 237

Аудитория………………………………………………………………………………………………………………………………… 237

Заказчик-руководитель/лидер…………………………………………………………………………………….. 238

Внутренние технические заказчики……………………………………………………………………………. 240

Внешние технические заказчики…………………………………………………………………………………. 241

Разработка портретов клиентов………………………………………………………………………………….. 243

Действенность………………………………………………………………………………………………………………………….. 245

Авторы………………………………………………………………………………………………………………………………………. 247

Процесс написания………………………………………………………………………………………………………………….. 249

Планирование……………………………………………………………………………………………………………….. 249

Черновик………………………………………………………………………………………………………………………… 250

Начните с тезисов………………………………………………………………………………………………… 250

Начните с фактов…………………………………………………………………………………………………. 250

Начните с конспекта или ключевых пунктов…………………………………………………….. 250

Редактирование…………………………………………………………………………………………………………….. 251

Форматы продуктов аналитической деятельности………………………………………………………………. 253

Короткоформатные продукты…………………………………………………………………………………….. 254

Сводка событий……………………………………………………………………………………………………. 255

Целевой пакет……………………………………………………………………………………………………….. 256

Отчет IOC……………………………………………………………………………………………………………… 257

Полноформатные продукты………………………………………………………………………………………… 258

Отчет о вредоносном ПО……………………………………………………………………………………… 259

Отчет о кампании…………………………………………………………………………………………………. 262

Оценка аналитической деятельности…………………………………………………………………. 267

Процесс запроса информации (RFI)……………………………………………………………………………. 268

Запрос RFI…………………………………………………………………………………………………………….. 269

Ответ на RFI………………………………………………………………………………………………………….. 269

Пример процесса RFI…………………………………………………………………………………………… 270

Автоматизированные продукты потребления…………………………………………………………… 271

Неструктурированные и полуструктурированные IOC…………………………………… 272

Сетевые сигнатуры Snort…………………………………………………………………………………….. 272

Сигнатуры файловой системы в Yara………………………………………………………………… 274

Автоматизированные форматы IOC…………………………………………………………………… 275

Установление ритма………………………………………………………………………………………………………………… 276

Распространение………………………………………………………………………………………………………….. 276

Обратная связь……………………………………………………………………………………………………………… 277

Регулярные продукты…………………………………………………………………………………………………… 278

Заключение………………………………………………………………………………………………………………………………. 278

Часть III. Путь вперед…………………………………………………………………… 281

Глава 10. Стратегическая аналитическая деятельность……………………….. 283

Что такое стратегическая аналитическая деятельность?……………………………………………………. 284

Роль стратегической аналитической деятельности в реагировании на инциденты на основе аналитических данных         286

Аналитическая деятельность за рамками реагирования на инциденты…………………………….. 287

Красная команда………………………………………………………………………………………………………….. 287

Управление уязвимостями…………………………………………………………………………………………… 289

Архитектура и инжиниринг…………………………………………………………………………………………. 289

Конфиденциальность, безопасность и физическая защита………………………………………. 290

Построение фрейма с помощью стратегической аналитической деятельности………………… 290

Модели для стратегической аналитической деятельности……………………………………… 291

Целевые модели……………………………………………………………………………………………………. 292

Цикл стратегической аналитической деятельности…………………………………………………………….. 298

Установление стратегических требований………………………………………………………………… 298

Сбор……………………………………………………………………………………………………………………………….. 299

Геополитические источники……………………………………………………………………………….. 299

Экономические источники…………………………………………………………………………………… 300

Исторические источники……………………………………………………………………………………… 301

Деловые источники………………………………………………………………………………………………. 301

Анализ……………………………………………………………………………………………………………………………. 302

Процессы анализа стратегической аналитической деятельности………………….. 302

Распространение………………………………………………………………………………………………………….. 305

Движение к упреждающей аналитической деятельности……………………………………………………. 306

Заключение………………………………………………………………………………………………………………………………. 307

Глава 11. Построение программы аналитической деятельности…………… 309

Вы готовы?……………………………………………………………………………………………………………………………….. 309

Планирование программы………………………………………………………………………………………………………. 311

Определение заинтересованных сторон…………………………………………………………………….. 312

Команда реагирования на инциденты……………………………………………………………….. 312

Центр/группа операций по обеспечению безопасности (SOC)………………………… 312

Команды по управлению уязвимостями…………………………………………………………….. 312

Красные команды / атакующие инженеры………………………………………………………… 313

Команды по обеспечению доверия и безопасности………………………………………….. 313

Руководители служб информационной безопасности (CISO)………………………….. 314

Конечные пользователи………………………………………………………………………………………. 314

Определение целей……………………………………………………………………………………………………….. 314

Определение критериев успеха…………………………………………………………………………………… 315

Определение требований и ограничений…………………………………………………………………… 316

Думайте стратегически………………………………………………………………………………………………… 317

Определение метрик…………………………………………………………………………………………………….. 317

Портреты заинтересованных лиц…………………………………………………………………………………………… 318

Тактические сценарии использования…………………………………………………………………………………… 319

Поддержка SOC…………………………………………………………………………………………………………….. 319

Инжиниринг обнаружения и оповещения………………………………………………………….. 319

Сортировка…………………………………………………………………………………………………………… 320

Ситуационная осведомленность………………………………………………………………………… 320

Управление индикаторами………………………………………………………………………………………….. 320

Управление платформой анализа угроз…………………………………………………………….. 320

Управление сторонними аналитическими данными и каналами……………………. 321

Обновление индикаторов…………………………………………………………………………………….. 321

Оперативные сценарии использования…………………………………………………………………………………. 322

Отслеживание кампании……………………………………………………………………………………………… 322

Определение направленности кампании…………………………………………………………… 323

Определение инструментов и тактик………………………………………………………………….. 323

Поддержка ответных мер…………………………………………………………………………………….. 323

Стратегические сценарии использования……………………………………………………………………………… 323

Поддержка архитектуры……………………………………………………………………………………………… 324

Улучшение защиты………………………………………………………………………………………………. 324

Сосредоточьте защиту на угрозах……………………………………………………………………… 324

Оценка рисков и стратегическая ситуационная осведомленность………………………….. 324

От стратегического к тактическому или от тактического к стратегическому?………………….. 325

Потребности в критически важной информации……………………………………………………….. 326

Команда аналитической деятельности…………………………………………………………………………………. 326

Создание разносторонней команды…………………………………………………………………………… 327

Развитие команд и процессов………………………………………………………………………………………. 328

Заключение………………………………………………………………………………………………………………………………. 329

Предметный указатель…………………………………………………………………………. 331

Об авторах……………………………………………………………………………………………. 334

Об изображении на обложке………………………………………………………………… 335

Опубликовано

4-е издание бестселлера Михаила Флёнова “Веб-сервер глазами хакера”

Веб-сервер глазами хакера. 4-е изд.

Представляем долгожданную новинку – 4-е издание легендарного бестселлера Михаила Флёнова “Веб-сервер глазами хакера”.

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

Для web-разработчиков и системных администраторов

  • Проблемы безопасности веб-серверов
  • Ошибки в сценариях на PHP
  • SQL-инъекции
  • Методы обхода капчи
  • Примеры ошибок на реальных веб-сайтах
  • Как искать и исправлять ошибки в сценариях
  • DoS-атаки на веб-сайт
  • CSRF- и XSS-уязвимости

Книгу “Веб-сервер глазами хакера. 4-е изд.” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………….. 9

Обо мне……………………………………………………………………………………………………………………………………….. 10

Требования…………………………………………………………………………………………………………………………………. 11

Что не вошло в книгу?……………………………………………………………………………………………………………….. 11

Интернет……………………………………………………………………………………………………………………………………… 12

Благодарности…………………………………………………………………………………………………………………………… 12

Глава 1. Основы безопасности……………………………………………………………….. 13

1.1. Социальная инженерия………………………………………………………………………………………………………. 13

1.2. Природа взлома…………………………………………………………………………………………………………………… 18

1.2.1. Любые данные опасны…………………………………………………………………………………………….. 19

1.2.2. Запретить нельзя пропустить………………………………………………………………………………….. 20

1.2.3. Санитайзер………………………………………………………………………………………………………………… 21

1.2.4. Место встречи…………………………………………………………………………………………………………… 23

1.3. Исследование………………………………………………………………………………………………………………………. 23

1.3.1. Определение типа операционной системы…………………………………………………………….. 27

1.3.2. Определение имен работающих служб………………………………………………………………….. 28

1.3.3. Используемые фреймворки………………………………………………………………………………………. 32

1.3.4. Использование эксплойтов………………………………………………………………………………………. 36

1.3.5. Автоматизация………………………………………………………………………………………………………….. 37

1.4. Взлом веб-сайтов………………………………………………………………………………………………………………… 40

1.4.1. Анализаторы веб-уязвимостей………………………………………………………………………………… 42

Утилита Sqlmap………………………………………………………………………………………………………… 43

Инструмент XSStrike………………………………………………………………………………………………… 44

1.4.2. Взлом с помощью поисковой системы……………………………………………………………………. 45

Поиск индексированных секретов………………………………………………………………………….. 45

Поиск уязвимых веб-сайтов…………………………………………………………………………………….. 46

Управление поисковым роботом…………………………………………………………………………….. 47

1.5. Подбор паролей………………………………………………………………………………………………………………….. 48

1.6. Троянские программы………………………………………………………………………………………………………… 52

1.7. Атаки на отказ в обслуживании………………………………………………………………………………………… 53

1.7.1. Атака Denial of Service (DoS)……………………………………………………………………………………. 53

1.7.2. Атака Distributed Denial of Service (DDoS)………………………………………………………………. 56

Защита от распределенной атаки…………………………………………………………………………… 57

1.8. Меры безопасности…………………………………………………………………………………………………………….. 58

1.8.1. Защита веб-сервера………………………………………………………………………………………………….. 59

1.8.2. Модули безопасности Apache…………………………………………………………………………………. 60

Модуль mod_sequrity……………………………………………………………………………………………….. 60

Модуль mod_rewrite…………………………………………………………………………………………………. 61

1.9. Права доступа…………………………………………………………………………………………………………………….. 62

1.9.1. Права сценариев веб-сервера………………………………………………………………………………….. 62

1.9.2. Права системных сценариев……………………………………………………………………………………. 63

1.9.3. Права доступа к СУБД…………………………………………………………………………………………….. 64

Права на удаленное подключение к СУБД……………………………………………………………. 66

1.10. Не все так безнадежно……………………………………………………………………………………………………… 67

1.11. Ошибки есть, их не может не быть…………………………………………………………………………………… 69

1.11.1. Самостоятельно написанные программы……………………………………………………………. 69

1.11.2. Готовые решения……………………………………………………………………………………………………. 70

1.11.3. Программы, написанные под заказ………………………………………………………………………. 71

1.11.4. Золотая середина……………………………………………………………………………………………………. 71

1.12. Сложность защиты……………………………………………………………………………………………………………. 72

1.13. Утечка информации………………………………………………………………………………………………………….. 72

1.13.1. «Говорящие» сервисы…………………………………………………………………………………………….. 72

1.13.2. Человеческий фактор……………………………………………………………………………………………… 73

1.14. Фишинг………………………………………………………………………………………………………………………………. 74

Глава 2. Простые методы взлома……………………………………………………………. 75

2.1. Накрутка голосования……………………………………………………………………………………………………….. 75

2.1.1. Вариант накрутки № 1……………………………………………………………………………………………… 76

2.1.2. Вариант накрутки № 2……………………………………………………………………………………………… 77

2.1.3. Вариант накрутки № 3……………………………………………………………………………………………… 78

2.1.4. Локальное хранилище……………………………………………………………………………………………… 79

2.1.5. Защита от накрутки………………………………………………………………………………………………….. 80

2.2. Флуд……………………………………………………………………………………………………………………………………… 82

2.3. CAPTCHA…………………………………………………………………………………………………………………………….. 85

2.3.1. Внутренний мир каптчи…………………………………………………………………………………………… 86

2.3.2. Примеры некорректных каптч…………………………………………………………………………………. 87

2.3.3. Пример хорошей каптчи………………………………………………………………………………………….. 89

2.3.4. Спамеры…………………………………………………………………………………………………………………….. 91

2.4. Хрупкое печенье………………………………………………………………………………………………………………….. 92

Глава 3. Взлом PHP-сценариев……………………………………………………………….. 94

3.1. Неверное обращение к файлам………………………………………………………………………………………….. 94

3.1.1. Локальное подключение файлов…………………………………………………………………………….. 95

Проблема include……………………………………………………………………………………………………. 100

3.1.2. Удаленное подключение файлов………………………………………………………………………….. 104

3.2. Ничего лишнего!……………………………………………………………………………………………………………….. 107

3.2.1. Лишние сценарии на рабочем сервере…………………………………………………………………. 107

3.2.2. Дополнительные программы…………………………………………………………………………………. 108

3.2.3. Резервные копии или старые файлы……………………………………………………………………… 108

3.3. Автоматическая регистрация переменных…………………………………………………………………….. 110

3.3.1. Метод GET………………………………………………………………………………………………………………. 112

3.3.2. Метод POST…………………………………………………………………………………………………………….. 115

3.3.3. Уязвимость………………………………………………………………………………………………………………. 118

3.3.4. Другие методы………………………………………………………………………………………………………… 120

3.3.5. Инициализация переменных………………………………………………………………………………….. 122

3.4. Работа с данными на сервере………………………………………………………………………………………….. 124

3.4.1. Локальная копия сайта………………………………………………………………………………………….. 124

3.4.2. Утилиты разработчика браузера………………………………………………………………………….. 125

3.4.3. Специализированные утилиты……………………………………………………………………………… 128

3.5. Принцип модульности………………………………………………………………………………………………………. 128

3.5.1. Конфигурационные файлы……………………………………………………………………………………. 128

3.5.2. Промежуточные модули………………………………………………………………………………………… 131

3.5.3. Скрытые функции…………………………………………………………………………………………………… 134

3.6. Проверка корректности параметров……………………………………………………………………………….. 135

3.7. Проблема регулярных выражений………………………………………………………………………………….. 137

3.7.1. Регулярные выражения Perl……………………………………………………………………………………. 138

3.8. Опасность переменных окружения…………………………………………………………………………………. 140

3.9. Выполнение во фрейме…………………………………………………………………………………………………….. 141

3.9.1. Воровство кликов……………………………………………………………………………………………………. 142

3.9.2. Уязвимость Cross Frame Scripting…………………………………………………………………………… 143

3.9.3. Защита от фреймов…………………………………………………………………………………………………. 143

3.10. Замечание для программистов на C#……………………………………………………………………………. 144

Глава 4. Работа с системными командами……………………………………………. 146

4.1. Вызов системных команд…………………………………………………………………………………………………. 146

4.2. Защита от выполнения произвольных команд………………………………………………………………. 150

4.3. Загрузка файлов………………………………………………………………………………………………………………… 152

4.3.1. Проверка корректности файлов изображений…………………………………………………….. 156

4.3.2. Проверка корректности текстовых файлов………………………………………………………….. 160

4.3.3. Сохранение файлов в базе данных……………………………………………………………………….. 161

4.3.4. Обращение к файловой системе……………………………………………………………………………. 161

4.3.5. Угроза безопасности………………………………………………………………………………………………. 164

4.4. Функция eval……………………………………………………………………………………………………………………… 165

Глава 5. SQL-инъекция (PHP + MySQL)……………………………………………….. 167

5.1. Поиск………………………………………………………………………………………………………………………………….. 168

5.2. Ошибка………………………………………………………………………………………………………………………………. 171

5.2.1. Сбор информации…………………………………………………………………………………………………… 175

5.2.2. Использование уязвимости……………………………………………………………………………………. 181

5.2.3. Доступ к файловой системе…………………………………………………………………………………… 182

5.2.4. Поиск уязвимости……………………………………………………………………………………………………. 183

5.2.5. Процент опасности…………………………………………………………………………………………………. 184

5.2.6. Возможные проблемы……………………………………………………………………………………………. 187

5.2.7. От теории к практике……………………………………………………………………………………………… 188

5.3. Настройка защиты от SQL-инъекции……………………………………………………………………………… 191

5.4. Защита СУБД……………………………………………………………………………………………………………………. 193

5.5. Технологии ORM………………………………………………………………………………………………………………. 197

Глава 6. SQL-инъекция (.NET + MS SQL Server)………………………………….. 199

6.1. Особенности MS SQL Server…………………………………………………………………………………………….. 199

6.1.1. Опасные процедуры MS SQL Server……………………………………………………………………… 200

6.1.2. Распределение прав доступа…………………………………………………………………………………. 203

6.1.3. Опасные SQL-запросы……………………………………………………………………………………………. 205

6.1.4. Рекомендации по безопасности MS SQL Server…………………………………………………… 206

6.2. Защита от инъекции в ASP.NET……………………………………………………………………………………….. 208

6.3. Entity Framework……………………………………………………………………………………………………………….. 209

Глава 7. CSRF-уязвимость……………………………………………………………………. 211

7.1. Примеры межсайтовой атаки…………………………………………………………………………………………… 211

7.2. Плохая защита от межсайтовой уязвимости………………………………………………………………….. 213

7.3. Хорошая защита……………………………………………………………………………………………………………….. 214

7.4. Сross-origin — делим ресурсы………………………………………………………………………………………….. 218

Глава 8. DoS-атака на веб-сайт…………………………………………………………….. 220

8.1. Поиск медленных страниц……………………………………………………………………………………………….. 220

8.2. Оптимизация работы с СУБД………………………………………………………………………………………….. 221

8.2.1. Оптимизация SQL-запросов…………………………………………………………………………………… 222

8.2.2. Оптимизация базы данных…………………………………………………………………………………….. 228

8.2.3. Выборка необходимых данных…………………………………………………………………………….. 232

8.3. Оптимизация кода…………………………………………………………………………………………………………….. 234

8.3.1. Кеширование вывода……………………………………………………………………………………………… 234

8.3.2. Кеширование веб-страниц…………………………………………………………………………………….. 235

8.3.3. Программные решения…………………………………………………………………………………………… 237

8.3.4. Медленный код……………………………………………………………………………………………………….. 238

8.3.5. Асинхронный код……………………………………………………………………………………………………. 240

8.4. Блокировки………………………………………………………………………………………………………………………… 240

8.5. Другие ресурсы…………………………………………………………………………………………………………………. 241

8.6. Оптимизация в C#……………………………………………………………………………………………………………… 242

8.7. Медленный HTTP……………………………………………………………………………………………………………… 245

8.8. Тестируем производительность………………………………………………………………………………………. 246

Глава 9. Авторизация…………………………………………………………………………… 251

9.1. Аутентификация на веб-сервере………………………………………………………………………………………. 251

9.2. Аутентификации на основе cookie…………………………………………………………………………………… 253

9.3. Советы по хранению паролей…………………………………………………………………………………………. 259

9.4. Соль на рану……………………………………………………………………………………………………………………… 259

9.5. Фиксация сеанса или сессии……………………………………………………………………………………………. 261

9.6. Закрытые сессии……………………………………………………………………………………………………………….. 263

9.7. Сессии публичных сайтов……………………………………………………………………………………………….. 263

9.8. Хранение сессии в cookie…………………………………………………………………………………………………. 264

9.9. OAuth-аутентификация…………………………………………………………………………………………………….. 266

9.10. Подбор аккаунтов…………………………………………………………………………………………………………… 269

9.11. Контрольный вопрос………………………………………………………………………………………………………. 271

9.12. Взлом двухфакторной аутентификации……………………………………………………………………….. 272

9.12.1. Кто-то посередине………………………………………………………………………………………………. 272

9.12.2. Секрет………………………………………………………………………………………………………………….. 274

9.13. Мало авторизации — параметры…………………………………………………………………………………. 275

Глава 10. XSS-уязвимость…………………………………………………………………….. 277

10.1. Основы XSS……………………………………………………………………………………………………………………… 277

10.2. Перехватываем данные………………………………………………………………………………………………….. 280

10.3. Мощь языка JavaScript……………………………………………………………………………………………………. 282

10.4. Защита от XSS…………………………………………………………………………………………………………………. 283

Глава 11. Web API………………………………………………………………………………… 290

11.1. Программа Postman………………………………………………………………………………………………………… 290

11.2. Утилита curl…………………………………………………………………………………………………………………….. 296

Заключение………………………………………………………………………………………….. 297

Предметный указатель…………………………………………………………………………. 299

Опубликовано

Встречайте: “Контролируемый взлом. Библия социальной инженерии”

Контролируемый взлом. Библия социальной инженерии

Книга рассматривает используемые современными киберпреступниками методы социальной инженерии и способы защиты от нее — как организационные, так и технические. Приведено 130 практических примеров атак, даны примеры фишинговых писем, раскрыты применяемые мошенниками психологические приемы и трюки, позволяющие вводить пользователей в заблуждение, подробно разобран используемый злоумышленниками программный инструментарий. Описаны различные векторы атак: по электронной почте,в  мессенджерах, в социальных сетях и в реальной жизни. Предложена методика создания 10 000 сценариев учебных атак, а также дана пошаговая инструкция их проведения от этапа подготовки до составления отчета.

Для специалистов по информационной безопасности

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

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

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

В книге вы найдете:

  • 130 практических примеров атак,
  • методику создания 10 000 сценариев учебных атак,
  • более 110 ссылок на дополнительную полезную информацию,
  • пошаговую инструкцию для проведения учебных атак от этапа подготовки до составления отчета;
  • десятки организационных и технических методов защиты от социальной инженерии в компаниях.

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

Книгу “Контролируемый взлом. Библия социальной инженерии” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие………………………………………………………………………………………… 9

От автора………………………………………………………………………………………………………………………………… 9

Кому и как можно использовать эту книгу?………………………………………………………………………. 11

Для представителей служб ИБ, СБ и ИТ-служб………………………………………………………… 13

Для пентестеров…………………………………………………………………………………………………………… 13

Для хакеров………………………………………………………………………………………………………………….. 14

Что такое социальная инженерия?……………………………………………………………………………………… 14

Опасность социальной инженерии…………………………………………………………………………………….. 15

Цитаты………………………………………………………………………………………………………………………….. 15

Ущерб от СИ…………………………………………………………………………………………………………………. 16

Глава 1. Онлайн-атаки………………………………………………………………………. 21

Подготовка……………………………………………………………………………………………………………………………. 21

Пентестеру……………………………………………………………………………………………………………………. 22

OSINT для СИ………………………………………………………………………………………………………. 22

Разведка боем………………………………………………………………………………………………………. 23

Проверка антиспама…………………………………………………………………………………………… 26

Переходим на личности……………………………………………………………………………………… 26

Какую фишинговую форму создавать?…………………………………………………………….. 27

Несуществующий адрес…………………………………………………………………………….. 27

Пробиваем MX-записи……………………………………………………………………………….. 28

Неведение…………………………………………………………………………………………………….. 28

От чьего имени писать?………………………………………………………………………………………. 29

BEC-атака……………………………………………………………………………………………………. 30

Таблица персонализации…………………………………………………………………………… 31

Пример email-MITM……………………………………………………………………………………. 32

Какой фишинговый домен купить?……………………………………………………………………. 33

Безопаснику………………………………………………………………………………………………………………….. 33

Готовим атаки………………………………………………………………………………………………………………………. 33

Атаки по email………………………………………………………………………………………………………………. 34

Идеи по составлению темы письма……………………………………………………………………. 34

Какую подпись и оформление использовать?………………………………………………….. 35

Выбираем контекст……………………………………………………………………………………………… 35

Векторы и сценарии……………………………………………………………………………………………. 36

Контекст: событийные атаки (Event attacks)……………………………………………………. 36

Событийные атаки: чрезвычайная ситуация…………………………………………… 36

Событийные атаки: праздники………………………………………………………………….. 37

Событийные атаки: политика……………………………………………………………………. 37

Контекст: причина………………………………………………………………………………………………. 38

Якобы взлом………………………………………………………………………………………………… 38

Внеплановая проверка от СРО………………………………………………………………….. 39

Неудачные попытки авторизации…………………………………………………………….. 40

Уведомление………………………………………………………………………………………………… 40

Что вы делаете в Бразилии?……………………………………………………………………….. 41

Контекст: запросы………………………………………………………………………………………………. 41

Контекст: вопросы………………………………………………………………………………………………. 41

Вопрос с вложением……………………………………………………………………………………. 41

А что это вы мне отправили?……………………………………………………………………… 42

Контекст: отправка……………………………………………………………………………………………… 42

Контекст: изменения……………………………………………………………………………………………. 42

Контекст: желание………………………………………………………………………………………………. 43

Контекст: «непонятки»………………………………………………………………………………………… 43

Переписка-ссылка……………………………………………………………………………………….. 43

Одинокий файл……………………………………………………………………………………………. 44

Усиление контекста…………………………………………………………………………………………….. 44

Усиление контекста: эмоции……………………………………………………………………… 44

Усиление контекста: давление…………………………………………………………………… 46

Письма от госорганов…………………………………………………………………………………. 46

Срочно обновитесь……………………………………………………………………………………… 47

Усиление контекста: ложь………………………………………………………………………….. 47

Фейковая переписка……………………………………………………………………………………. 48

Фейковая пересылка…………………………………………………………………………………… 48

Усиление контекста: совпадение………………………………………………………………. 49

Источники фишинговых писем…………………………………………………………………………… 49

Файлы……………………………………………………………………………………………………………………………. 50

Некорректное отображение……………………………………………………………………………….. 50

Подарочный сертификат…………………………………………………………………………………….. 50

Пустой файл…………………………………………………………………………………………………………. 51

Документ с «мыльцой»………………………………………………………………………………………… 53

Имитация Excel-таблицы в Word-документе…………………………………………………….. 57

Небезопасный PDF-файл…………………………………………………………………………………….. 57

Файл как прокладка перед нагрузкой……………………………………………………………….. 59

Отсутствующий сертификат………………………………………………………………………………. 61

Разрешите и заполните……………………………………………………………………………………….. 62

Файл ICS………………………………………………………………………………………………………………. 63

Социальные сети………………………………………………………………………………………………………….. 64

Подготовка…………………………………………………………………………………………………………… 65

О поиске сотрудников в соцсетях………………………………………………………………………. 69

Клонирование аккаунтов……………………………………………………………………………………. 70

Медленно, но верно…………………………………………………………………………………………….. 70

Многоходовка в соцсети…………………………………………………………………………………….. 70

Терпеливо ждем…………………………………………………………………………………………………… 71

Мессенджеры……………………………………………………………………………………………………………….. 71

Telegram-каналы………………………………………………………………………………………………….. 72

Сотрудник — физлицо………………………………………………………………………………………… 72

Онлайн-консультанты…………………………………………………………………………………………………. 73

Веб-сайты……………………………………………………………………………………………………………………… 73

Поддельное окно для ввода логина и пароля…………………………………………………… 74

Скачайте на нашем сайте…………………………………………………………………………………… 74

Корпоративные порталы……………………………………………………………………………………. 74

Разрешите уточнить……………………………………………………………………………………………. 75

Новостные ресурсы…………………………………………………………………………………………….. 75

Туда, да не туда…………………………………………………………………………………………………… 76

Фейковая капча и предупреждение о cookie…………………………………………………….. 76

Всплывающее окно……………………………………………………………………………………………… 77

Персонализированный сайт……………………………………………………………………………….. 79

Покажи себя…………………………………………………………………………………………………………. 80

Реклама…………………………………………………………………………………………………………………………. 81

Таргет по MAC-адресу……………………………………………………………………………………….. 81

Таргет по геолокации………………………………………………………………………………………….. 82

Адвёртинг…………………………………………………………………………………………………………….. 82

Фиктивный APK-файл…………………………………………………………………………………………. 83

Лидеры мнений…………………………………………………………………………………………………………….. 83

Видео-deepfake…………………………………………………………………………………………………………….. 83

Видео без видео……………………………………………………………………………………………………………. 84

Аудио-deepfake……………………………………………………………………………………………………………. 84

«Find trap» сценарии…………………………………………………………………………………………………….. 85

Find trap с помощью рекомендаций…………………………………………………………………… 86

Выдуманная компания……………………………………………………………………………………….. 87

Find trap с помощью звонков………………………………………………………………………………. 87

Продажа фиктивного сертификата……………………………………………………………………. 87

Комментарии………………………………………………………………………………………………………………… 87

Легализованная СИ……………………………………………………………………………………………………… 88

Отправили к вам………………………………………………………………………………………………….. 89

Фишинг………………………………………………………………………………………………………………………….. 90

Проверка на утечку…………………………………………………………………………………………….. 90

Data-phishing………………………………………………………………………………………………………… 90

Многоходовки………………………………………………………………………………………………………………. 91

Фейковое интервью……………………………………………………………………………………………………… 93

Цепочки писем……………………………………………………………………………………………………………… 93

Цепочки писем: неправильная кодировка как повод……………………………………….. 93

Цепочки писем: простите, не туда……………………………………………………………………… 94

Цепочки писем: нас взломали…………………………………………………………………………….. 94

Цепочки писем: использование для data-фишинга…………………………………………… 94

Глава 2. Технологические трюки введения в заблуждение………………… 95

Маскировка ссылок……………………………………………………………………………………………………………… 95

Символ @……………………………………………………………………………………………………………………… 95

Слеш в Unicode…………………………………………………………………………………………………………….. 96

Домены в Punycode………………………………………………………………………………………………………. 96

Зашумление юникодом……………………………………………………………………………………………….. 96

Обфускация ссылок……………………………………………………………………………………………………… 96

QR-коды………………………………………………………………………………………………………………………… 97

Некорректный протокол……………………………………………………………………………………………… 97

Ссылки в виде картинок………………………………………………………………………………………………. 98

Ссылка в документах…………………………………………………………………………………………………… 99

Очень длинная ссылка…………………………………………………………………………………………………. 99

Ссылка виде цифр………………………………………………………………………………………………………. 100

Невидимая при наведении мыши……………………………………………………………………………… 100

Редиректы…………………………………………………………………………………………………………………… 100

Неактивные ссылки……………………………………………………………………………………………………. 102

Похожие на официальные…………………………………………………………………………………………. 103

Ссылки в поддоменах………………………………………………………………………………………………… 103

Сращивание с поддоменом……………………………………………………………………………………….. 104

Сращивание с протоколом……………………………………………………………………………………….. 104

Домен после слеша……………………………………………………………………………………………………. 104

В дополнение……………………………………………………………………………………………………………… 104

Капча от ботов защитного ПО…………………………………………………………………………. 104

Одноразовые ссылки…………………………………………………………………………………………. 105

Подделка отправителя………………………………………………………………………………………………………. 105

Email с официального ресурса………………………………………………………………………………………….. 106

Вложения и файлы……………………………………………………………………………………………………………… 107

Файлы Microsoft Office……………………………………………………………………………………………… 107

Рушим шаблоны поведения через печать………………………………………………………………… 108

PDF-файлы………………………………………………………………………………………………………………….. 109

HTML-файлы……………………………………………………………………………………………………………… 110

Маскировка расширения html…………………………………………………………………………………… 111

Архивы с паролем……………………………………………………………………………………………………… 112

Архивы без пароля…………………………………………………………………………………………………….. 112

Редко используемые форматы архивов……………………………………………………………………. 113

Онлайн-документы…………………………………………………………………………………………………………….. 113

Excel-файл, размещенный онлайн……………………………………………………………………………. 113

Глава 3. Атаки в офлайне………………………………………………………………… 117

Проникновение на физические объекты…………………………………………………………………………… 117

Предмет в руках…………………………………………………………………………………………………………. 117

Подслушанная легенда……………………………………………………………………………………………… 118

Проведение интервью………………………………………………………………………………………………… 119

Давайте помогу………………………………………………………………………………………………………….. 119

Корпоративная столовая………………………………………………………………………………………….. 119

Небезопасные парковки……………………………………………………………………………………………. 120

Паровозик…………………………………………………………………………………………………………………… 120

Мусорный дайвинг…………………………………………………………………………………………………….. 120

Отделение банка………………………………………………………………………………………………………… 121

Отвлекающий маневр………………………………………………………………………………………………… 121

Потенциальный клиент……………………………………………………………………………………………… 122

Собеседование…………………………………………………………………………………………………………… 122

Гостевой пропуск………………………………………………………………………………………………………. 122

Подделка карты-пропуска………………………………………………………………………………………… 122

Черный ход…………………………………………………………………………………………………………………. 122

Плечевая атака…………………………………………………………………………………………………………………… 123

USB-устройства………………………………………………………………………………………………………………….. 123

Таргетированная флешка………………………………………………………………………………………….. 123

Флешка с легендой…………………………………………………………………………………………………….. 123

«За букет роз»…………………………………………………………………………………………………………….. 124

Juice jacking………………………………………………………………………………………………………………… 124

Смишинг……………………………………………………………………………………………………………………………… 125

Вишинг………………………………………………………………………………………………………………………………… 126

Подделка номера……………………………………………………………………………………………………….. 126

Многоходовый звонок……………………………………………………………………………………………….. 126

Вернитесь на работу…………………………………………………………………………………………………. 126

Забыл кодовое слово…………………………………………………………………………………………………. 127

Отсылка к отпускнику……………………………………………………………………………………………….. 127

Синхронный ввод………………………………………………………………………………………………………. 127

Телефон + find trap…………………………………………………………………………………………………….. 127

Любой добавочный……………………………………………………………………………………………………. 128

Китовые атаки……………………………………………………………………………………………………………. 128

Усиление звонком………………………………………………………………………………………………………. 129

Квид про кво……………………………………………………………………………………………………………….. 129

Callback phishing………………………………………………………………………………………………………… 130

Бумага не во благо…………………………………………………………………………………………………………….. 131

Подбрасывание корпоративных документов………………………………………………………….. 131

Визуальный пропуск…………………………………………………………………………………………………. 131

Реклама на бумаге……………………………………………………………………………………………………… 131

QR-коды на бумажных носителях……………………………………………………………………………. 131

Справка………………………………………………………………………………………………………………………. 132

Общественный транспорт…………………………………………………………………………………………………. 133

Wi-Fi…………………………………………………………………………………………………………………………………….. 133

Мероприятия………………………………………………………………………………………………………………………. 134

Двухдневное мероприятие………………………………………………………………………………………… 134

Организовал себе на голову……………………………………………………………………………………… 134

Конференции, выставки и форумы…………………………………………………………………………… 134

Пришел к одним, пошел к другим…………………………………………………………………………….. 135

Корпоратив………………………………………………………………………………………………………………… 135

Комбинирование………………………………………………………………………………………………………………… 135

Глава 4. Проведение онлайн-атак по email………………………………………. 137

Какой софт использовать?………………………………………………………………………………………………… 137

Список email-пользователей……………………………………………………………………………………………… 138

Как создавать сообщения для атак?………………………………………………………………………………… 138

Чек-лист применения электронной СИ…………………………………………………………………………….. 140

Как повысить киберграмотность сотрудников?……………………………………………………………… 140

Технические аспекты обучения………………………………………………………………………………………… 142

Глава 5. Технические меры противодействия СИ…………………………….. 145

Софт…………………………………………………………………………………………………………………………………….. 145

Корпоративный браузер…………………………………………………………………………………………… 145

Сегментация сети и Zero Trust…………………………………………………………………………………… 146

Невозможность залогиниться в почте с недоверенных IP-адресов………………………. 146

Обнаружение повторного использования пароля………………………………………………….. 146

Фиды о фишинге…………………………………………………………………………………………………………. 146

Антифишинговый шрифт…………………………………………………………………………………………… 147

Настройка DKIM, SPF и DMARC……………………………………………………………………………… 148

Предотвращение выполнения исходного кода……………………………………………………….. 149

Sandbox………………………………………………………………………………………………………………………. 150

Hardware……………………………………………………………………………………………………………………………… 150

Межсетевые экраны…………………………………………………………………………………………………… 150

FIDO…………………………………………………………………………………………………………………………….. 151

Различия между UAF, U2F и FIDO2…………………………………………………………………. 152

Недостатки этого способа защиты………………………………………………………………….. 153

OTP-токены…………………………………………………………………………………………………………………. 153

Глава 6. Организационные меры…………………………………………………….. 155

Модель зрелости осведомленности о безопасности………………………………………………. 155

Одобрение процесса повышения осведомленности у руководителей………………….. 157

Обучение: памятки, курсы, форматы обучения………………………………………………………. 158

Регламенты…………………………………………………………………………………………………………………. 159

Регламент обучения персонала……………………………………………………………………….. 160

Некоторые аспекты для учета в регламентах………………………………………………… 160

Контроль реквизитов………………………………………………………………………………………… 161

Дополнительная проверка перед оплатой……………………………………………………… 161

Как вести себя с гостями?…………………………………………………………………………………. 161

Общение с коллегами………………………………………………………………………………………… 162

72 минуты до начала конца……………………………………………………………………………… 162

Сотни регламентов по информационной безопасности………………………………… 162

Послесловие…………………………………………………………………………………….. 165

Приложение 1. Генератор онлайн-СИ………………………………………………. 167

Приложение 2. Классификатор СИ…………………………………………………… 169

Электронная социальная инженерия v0.81……………………………………………………………………… 169

Офлайн социальная инженерия v0.2………………………………………………………………………………… 175

Приложение 3. Таблица персонализации…………………………………………. 177

Приложение 4. Бесплатное в помощь службе ИБ и ИТ…………………….. 179

Приложение 5. Критерии выбора платформы по повышению осведомленности   181

Приложение 6. Словарь терминов……………………………………………………. 187

Юрий Другач

Другач Юрий Станиславович— участник программ Bug Bounty, находил уязвимости в PayPal, Google, Яндекс, Mail.ru. Автор статей в журнале «Хакер», на порталах SecurityLab, «Хабр», а также создатель и автор блога о социальной инженерии stopphish.ru. Сооснователь компании по обучению киберграмотности S

Опубликовано

Представляем 5-е издание книги “PHP глазами хакера”

PHP глазами хакера. 5-е издание

В книге рассмотрены вопросы безопасности и оптимизации сценариев на языке PHP. Большое внимание уделено описанию типичных ошибок программистов, благодаря которым, хакеры проникают на сервер, а также представлены методы и приведены практические рекомендации противостояния внешним атакам. Показаны реальные примеры взлома Web-сайтов и рекомендации, которые помогут создавать более защищенные сайты. В 5-м издании переписаны примеры с учетом современных возможностей PHP 8 и добавлена глава по безопасности во фреймворках Laravel и Symfony.

Для Web-программистов, администраторов и специалистов по безопасности

Создание безопасных Web-приложений на PHP

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

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

В 5-м издании переписаны примеры с учетом современных возможностей PHP 8 и добавлена глава по безопасности во фреймворках Laravel и Symfony.

Книгу “PHP глазами хакера. 5-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие к пятому изданию……………………………………………………………….. 7

Предисловие…………………………………………………………………………………………….. 8

Об авторе……………………………………………………………………………………………………………………………………. 10

Благодарности…………………………………………………………………………………………………………………………… 10

Глава 1. Введение в PHP………………………………………………………………………… 11

1.1. Что такое PHP?……………………………………………………………………………………………………………………. 11

1.2. Создание сайта для Apache……………………………………………………………………………………………….. 12

1.3. Как работает PHP?……………………………………………………………………………………………………………… 15

1.4. Чего ждать дальше?……………………………………………………………………………………………………………. 17

Глава 2. Основы PHP…………………………………………………………………………….. 18

2.1. PHP-инструкции………………………………………………………………………………………………………………….. 18

2.2. Подключение файлов………………………………………………………………………………………………………….. 23

2.3. Вывод данных……………………………………………………………………………………………………………………… 27

2.4. Правила кодирования…………………………………………………………………………………………………………. 28

2.4.1. Комментарии…………………………………………………………………………………………………………………. 29

2.4.2. Чувствительность………………………………………………………………………………………………………….. 30

2.4.3. Переменные……………………………………………………………………………………………………………………. 32

2.4.4. Основные операции………………………………………………………………………………………………………. 35

2.4.5. Область видимости……………………………………………………………………………………………………….. 36

2.4.6. Константы……………………………………………………………………………………………………………………… 38

2.5. Управление выполнением программы………………………………………………………………………………. 39

2.6. Циклы…………………………………………………………………………………………………………………………………… 49

2.6.1. Цикл for………………………………………………………………………………………………………………………….. 50

2.6.2. Цикл while………………………………………………………………………………………………………………………. 52

2.6.3. Бесконечные циклы………………………………………………………………………………………………………. 52

2.6.4. Управление циклами…………………………………………………………………………………………………….. 53

2.7. Прерывание работы программы……………………………………………………………………………………….. 55

2.8. Функции……………………………………………………………………………………………………………………………….. 56

2.9. Классы…………………………………………………………………………………………………………………………………. 63

2.10. Массивы…………………………………………………………………………………………………………………………….. 66

2.11. Обработка ошибок……………………………………………………………………………………………………………. 69

2.12. Передача данных……………………………………………………………………………………………………………… 70

2.12.1. Переменные окружения………………………………………………………………………………………………. 71

2.12.2. Передача параметров…………………………………………………………………………………………………. 72

2.12.3. Метод GET…………………………………………………………………………………………………………………… 76

2.12.4. Метод POST…………………………………………………………………………………………………………………. 78

2.12.5. Скрытые параметры…………………………………………………………………………………………………… 80

2.13. Хранение параметров посетителя…………………………………………………………………………………… 81

2.13.1. Сеансы…………………………………………………………………………………………………………………………. 83

2.13.2. Cookies…………………………………………………………………………………………………………………………. 87

2.13.3. Безопасность cookie……………………………………………………………………………………………………. 91

2.14. Файлы………………………………………………………………………………………………………………………………… 93

2.14.1. Открытие файла………………………………………………………………………………………………………….. 94

2.14.2. Закрытие файла…………………………………………………………………………………………………………… 95

2.14.3. Чтение данных…………………………………………………………………………………………………………….. 95

2.14.4. Дополнительные функции чтения……………………………………………………………………………… 98

2.14.5. Запись данных…………………………………………………………………………………………………………….. 98

2.14.6. Позиционирование в файле………………………………………………………………………………………… 99

2.14.7. Свойства файлов……………………………………………………………………………………………………….. 100

Глава 3. Безопасность………………………………………………………………………….. 102

3.1. Комплексная защита………………………………………………………………………………………………………… 103

3.2. Права доступа…………………………………………………………………………………………………………………… 105

3.3. Как взламывают сценарии?……………………………………………………………………………………………… 105

3.4. Основы защиты сценариев……………………………………………………………………………………………….. 107

3.4.1. Реальный пример ошибки…………………………………………………………………………………………… 108

3.4.2. Рекомендации по защите……………………………………………………………………………………………. 111

3.4.3. Тюнинг PHP…………………………………………………………………………………………………………………. 112

3.5. Проверка корректности данных………………………………………………………………………………………. 113

3.6. Регулярные выражения…………………………………………………………………………………………………….. 118

3.6.1. Функции регулярных выражений PHP………………………………………………………………………. 119

Функция ereg()…………………………………………………………………………………………………………….. 119

Функция eregi()……………………………………………………………………………………………………………. 119

Функция ereg_replace()………………………………………………………………………………………………. 119

Функция eregi_replace()……………………………………………………………………………………………… 120

Функция split()…………………………………………………………………………………………………………….. 120

Функция spliti()……………………………………………………………………………………………………………. 120

3.6.2. Использование регулярных выражений PHP……………………………………………………………. 120

3.6.3. Использование регулярных выражений Perl…………………………………………………………….. 125

3.6.4. Функции регулярных выражений Perl……………………………………………………………………….. 127

Функция preg_match()………………………………………………………………………………………………… 127

Функция preg_match_all()………………………………………………………………………………………….. 128

Функция preg_split()…………………………………………………………………………………………………… 129

3.6.5. Проверка e-mail…………………………………………………………………………………………………………… 129

3.6.6. Советы по использованию регулярных выражений………………………………………………… 129

3.7. Что и как фильтровать?…………………………………………………………………………………………………….. 130

3.8. Базы данных……………………………………………………………………………………………………………………… 134

3.8.1. Основы баз данных…………………………………………………………………………………………………….. 134

3.8.2. Атака SQL Injection…………………………………………………………………………………………………….. 136

3.8.3. Реальное экранирование……………………………………………………………………………………………. 145

3.8.4. Параметризированные запросы………………………………………………………………………………… 146

3.8.5. Работа с файлами……………………………………………………………………………………………………….. 151

3.8.6. Практика работы с базами данных…………………………………………………………………………… 151

3.8.7. Проверка URL……………………………………………………………………………………………………………… 152

3.9. Работа с файлами……………………………………………………………………………………………………………… 153

3.10. Криптография………………………………………………………………………………………………………………….. 154

3.10.1. Симметричное шифрование…………………………………………………………………………………….. 154

3.10.2. Асимметричное шифрование…………………………………………………………………………………… 155

3.10.3. Необратимое шифрование……………………………………………………………………………………….. 156

3.10.4. Практика использования шифрования……………………………………………………………………. 158

3.11. Атака Cross-Site Scripting………………………………………………………………………………………………… 164

3.12. Флуд…………………………………………………………………………………………………………………………………. 169

3.12.1. Защита от флуда сообщениями……………………………………………………………………………….. 169

3.12.2. Защита от накрутки голосований……………………………………………………………………………. 170

3.13. Изменения формы и атака CSRF……………………………………………………………………………………. 172

3.14. Сопровождение журнала……………………………………………………………………………………………….. 175

3.15. Защита от неправомерных изменений………………………………………………………………………….. 176

3.16. Панель администратора………………………………………………………………………………………………… 178

3.17. Опасная переменная $REQUEST_URI…………………………………………………………………………… 179

3.18. CAPTCHA………………………………………………………………………………………………………………………… 180

3.19. Сериализация………………………………………………………………………………………………………………….. 185

Глава 4. Оптимизация………………………………………………………………………….. 188

4.1. Алгоритм……………………………………………………………………………………………………………………………. 188

4.2. Слабые места…………………………………………………………………………………………………………………….. 190

4.3. Базы данных……………………………………………………………………………………………………………………… 191

4.3.1. Оптимизация запросов……………………………………………………………………………………………….. 192

4.3.2. Оптимизация СУБД…………………………………………………………………………………………………….. 196

4.3.3. Выборка необходимых данных…………………………………………………………………………………. 198

4.3.4. Изучайте систему………………………………………………………………………………………………………… 200

4.4. Оптимизация PHP……………………………………………………………………………………………………………… 202

4.4.1. Кеширование вывода………………………………………………………………………………………………….. 202

4.4.2. Кеширование страниц………………………………………………………………………………………………… 203

4.5. Оптимизация или безопасность?……………………………………………………………………………………… 205

4.6. Переход на PHP 8……………………………………………………………………………………………………………… 207

Глава 5. Примеры работы с PHP………………………………………………………….. 208

5.1. Загрузка файлов на сервер………………………………………………………………………………………………. 208

5.2. Проверка корректности файла………………………………………………………………………………………… 213

5.3. Запретная зона………………………………………………………………………………………………………………….. 216

5.3.1. Аутентификация………………………………………………………………………………………………………….. 216

5.3.2. Защита сценариев правами доступа сервера Apache……………………………………………… 223

5.4. Работа с сетью…………………………………………………………………………………………………………………… 224

5.4.1. Работа с DNS……………………………………………………………………………………………………………….. 225

5.4.2. Протоколы…………………………………………………………………………………………………………………… 225

5.4.3. Сокеты………………………………………………………………………………………………………………………….. 226

Инициализация…………………………………………………………………………………………………………… 227

Серверные функции……………………………………………………………………………………………………. 227

Клиентские функции…………………………………………………………………………………………………… 228

Обмен данными…………………………………………………………………………………………………………… 229

Управление сокетами…………………………………………………………………………………………………. 230

5.5. Сканер портов…………………………………………………………………………………………………………………… 231

5.6. FTP-клиент низкого уровня………………………………………………………………………………………………. 234

5.7. Работа с электронной почтой………………………………………………………………………………………….. 237

5.7.1. Протокол SMTP…………………………………………………………………………………………………………… 237

5.7.2. Функция mail()……………………………………………………………………………………………………………… 239

5.7.3. Соединение с SMTP-сервером……………………………………………………………………………………. 241

5.7.4. Безопасность электронной почтовой службы………………………………………………………….. 242

5.7.5. Производительность отправки почты……………………………………………………………………….. 242

5.8. Защита ссылок………………………………………………………………………………………………………………….. 244

5.9. PHP в руках хакера…………………………………………………………………………………………………………… 245

5.10. Уловки……………………………………………………………………………………………………………………………… 247

5.10.1. Переадресация………………………………………………………………………………………………………….. 247

5.10.2. Всплывающие окна…………………………………………………………………………………………………… 249

5.10.3. Тег <iframe>………………………………………………………………………………………………………………. 250

5.10.4. Стой, не уходи!………………………………………………………………………………………………………….. 251

5.11. Как убрать теги?……………………………………………………………………………………………………………… 252

Глава 6. Фреймворки PHP……………………………………………………………………. 254

6.1. Знакомство с Laravel………………………………………………………………………………………………………… 254

6.2. Быстрый старт…………………………………………………………………………………………………………………… 256

6.3. Уязвимость CSRF………………………………………………………………………………………………………………. 259

6.4. Базы данных……………………………………………………………………………………………………………………… 261

6.4.1. Добавление данных……………………………………………………………………………………………………. 263

6.4.2. Чтение данных…………………………………………………………………………………………………………….. 264

6.4.3. Флуд при добавлении данных…………………………………………………………………………………… 266

6.4.4. Работа с базами данных в Symfony………………………………………………………………………….. 266

6.5. Фреймворки и защита от XSS…………………………………………………………………………………………… 267

6.5.1. XSS в Symfony…………………………………………………………………………………………………………….. 269

Литература…………………………………………………………………………………………… 270

Описание файлового архива, сопровождающего книгу……………………….. 270

Предметный указатель…………………………………………………………………………. 271

Фленов Михаил

Флёнов Михаил, профессиональный программист. Работал в журнале «Хакер», в котором несколько лет вел рубрики «Hack-FAQ» и «Кодинг» для программистов, печатался в журналах «Игромания» и «Chip-Россия». Автор бестселлеров «Библия Delphi», «Программирование в Delphi глазами хакера», «Программирование на C++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.

Опубликовано

Новинка: “Хозяйка Спасского озера. Заволжские сказки”

Хозяйка Спасского озера. Заволжские сказки.

Лесное Заволжье протянулось от Нижнего Новгорода до Костромской области и Республики Марий Эл. Этот край овеян мифами, связан с важными и героическими событиями российской истории. Светлые волжские берега, дремучие таёжные леса, таинственные озёра и реки хранят много легенд и сказок народов, живущих здесь, — русских, марийцев, мордвы, татар.
Ирина Дружаева, член Союза писателей России, автор публикаций в «Весёлых картинках», «Мурзилке», лауреат кинофестиваля «Лучезарный ангел» и премии «Золотое перо России», услышала эти сказки в детстве от своей бабушки и других жителей городецких и керженецких деревень. Литературный талант и любовь к родному краю превратили народные истории в захватывающие литературные сказки.

Книгу можно купить в нашем интернет-магазине.

 

Автор

Ирина-Дружаева

“… Люблю природу родимой керженской тайги, люблю сказки, бережно храню в душе впечатления радостного детства. Умение удивляться всему и вся – одуванчикам на лужайке, головастикам в луже, разноцветным камешкам на дне журчащего ручья. Они казались волшебными и драгоценными в ручье. Но стоило вытащить их из воды, высыхали и становились серой галькой. Ещё тогда поняла, что волшебство не всегда надо хватать руками. В него можно верить, о нём нужно мечтать, о нём хочется писать.”

Ирина Дружаева

Художник

Марина Дамбиева

Марина Дамбиева — известный художник из Улан-Удэ. Один из авторов флага и герба Усть-Ордынского Бурятского автономного округа. В настоящее время живет и работает в Санкт-Петербурге.
“Сейчас работаю в издательстве, делаю книжки, иллюстрации, дома пишу картины, живу нормально и радуюсь каждому дню, чего и всем желаю!”

Опубликовано

Новый набор для юных конструкторов “BBC micro:bit…”

BBC micro:bit. Набор для юных конструкторов + КНИГА

Набор “BBC micro:bit. Набор для юных конструкторов + КНИГА” разработан на основе опыта работы с детьми 5-7 классов на уроках информатики и внеурочных занятиях. Рассмотрено более 35 творческих проектов с использованием учебной платы BBC micro:bit. В состав набора входит книга “BBC micro:bit для юных конструкторов и программистов”, плата BBC micro:bit, а также электронные компоненты, необходимые для выполнения проектов из книги.
С помощью этого набора ребёнок шаг за шагом через игру и творчество освоит основы программирования, научится проектировать и конструировать простейшие электронные устройства. Особое внимание уделено разработке увлекательных компьютерных игр. Разработка кода выполняется в дружелюбной для детей в Scratch-подобной среде визуального программирования MakeCode. Электронный архив на сайте издательства содержит чертежи моделей конструкций и инструкции по их сборке.

СОСТАВ НАБОРА

✓КОНТРОЛЛЕР
x1         Плата BBC micro:bit

ПРОВОДА
x1         Кабель USB для загрузки программы
x10       Провода с “крокодилами” на обоих концах

РЕЗИСТОРЫ, ПОТЕНЦИОМЕТРЫ
x10       Резистор 100 Ом ¼ Вт
x10       Потенциометр 10 кОм

СВЕТОДИОДЫ
x2         Светодиоды красные 5 мм
x2         Светодиоды желтые 5 мм
x2         Светодиоды синие 5 мм
x2         Светодиоды зеленые 5 мм

ПИТАНИЕ
x1         Отсек для двух батареек 1,5 В AAA (или AA)*, выключателем и штекером для подключения к плате BBC micro:bit
x2         Батарейки AAA (или AA)*

КНИГА
x1         Елисеева О., Семионенков М., Тузова О. «BBC micro:bit для юных конструкторов и программистов» — СПб.: БХВ-Петербург, 2022— 208 с.

ВИДЕОУРОКИ

От авторов книги “BBC micro:bit для юных конструкторов и программистов“, которая входит в состав набора.

Предисловие для юного читателя

Дорогой читатель!

У тебя в руках необычная книга. Вместе с ней ты выполнишь более 20 проектов, основную роль в которых играет удивительное устройство — компьютер, помещающийся на ладони. Называется это устройство BBC micro:bit или просто — микро:бит. Мы старались собрать в книге проекты, которые были бы интересны всем — мальчикам и девочкам, любителям программирования и тем, кто только ещё знакомится с этой наукой, «технарям» и «гуманитариям». Читая книгу и выполняя описанные в ней проекты, ты научишься проектировать и конструировать «умные» устройства, игры, модели реального мира с электронными элементами и управлять ими с помощью компьютерных программ, написанных для микро:бита. И это не фантастика.

Микро:бит — действительно, удивительное устройство. Его малые размеры  не помешали разработчикам разместить на плате современный достаточно мощный процессор, программируемые кнопки, светодиодный дисплей, компас, акселерометр, микрофон, динамик, датчики света и температуры, Bluetooth-антенну, контакты для подключения внешних устройств. При этом научиться программировать микро:бит и управлять им совсем не сложно. Если тебе уже приходилось работать в среде Scratch, то многое покажется знакомым — микро:бит мы так же будем программировать на визуальном языке, в котором программа собирается, как пазл, из командных блоков, но в другой среде — бесплатном облачном редакторе MakeCode for micro:bit, в котором есть всё необходимое для программирования «железа». Однако от «иметь всё необходимое» до «уметь» — длинный путь. Преодолеть его поможет наша книга.

Предисловие для учителя и руководителя кружка технического творчества

Уважаемый учитель!

В аннотации написано, что книга предназначена для самостоятельного изучения школьниками 11+, а также для использования учителями информатики и технологии общеобразовательных школ и преподавателями дополнительного образования в своей работе. К этому добавим, что материалы книги прошли успешную апробацию в школах, которые объединяет и соединяет международная образовательная сеть ORT FSU (https://www.facebook.com/ort.stem/). Это школы России (Москвы, Санкт-Петербурга, Самары, Казани), Украины, Молдовы, Эстонии и других государств.

С учебной точки зрения в книге можно выделить следующие темы.

  1. Основы программирования.
  2. Введение в моделирование программируемых технологических систем с использованием электронных компонентов, конструирование простейших электрических цепей.
  3. Конструирование из картона и бумаги.

Микро:бит — отличный инструмент для знакомства школьников 5–7 классов с основами программирования. Разрабатывая проекты, получая реальный осязаемый результат, подросток освоит, причём на практике, основные понятия и приёмы программирования:

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

функция, функция с параметром;

  • объект спрайт, управление спрайтом, свойства спрайта;
  • массивы (числовой массив, массив изображений, массив спрайтов);
  • работа с библиотеками.

Следует отметить очень важную характеристику среды, в которой происходит обучение программированию: микро:бит и среда программирования разработаны и развиваются в парадигме, заложенной ещё основателем Лого, всемирно известным учёным Сеймуром Пейпертом (Seymour Papert) — «низкий порог и высокий потолок». Для начала работы с микро:битом не нужна специальная подготовка, достаточно иметь базовые навыки работы с компьютером и школьные знания начального уровня. В то же время микро:бит позволяет решать задачи высокого уровня сложности, которые могут быть интересны и опытному программисту. При этом делается акцент на самостоятельно творчество и оно не является навязанным, а рождается эмоциональным настроем: работать с микро:битом интересно и весело. Юные разработчики легко осваивают базовые приёмы программирования микро:бита независимо от своих математических способностей. При этом всегда есть пространство для решения сложных задач, которые интересны и профессионалам. Аргументом могут служить группа Micro:bit Fans в социальной сети Facebook (https://www.facebook.com/groups/477091146011242), насчитывающая более 4 тысяч взрослых пользователей, и развивающаяся русско-язычная группа BBC micro:bit по-русски (https://www.facebook.com/groups/microbit.ru).

Эта книга — начальное знакомство с электронной платой микро:бит и её возможностями, поэтому в рассмотренных моделях технологических систем используется минимальное количество внешних аксессуаров (светодиоды, резисторы, потенциометр). На самом деле, многие фирмы выпускают наборы электроники для микро:бита, в которые входят различные датчики (более 30), моторы, сервоприводы и многое другое. В множестве аксессуаров для микро:бита необходимо выделить видеосенсор с искусственным интеллектом HuskyLens, с помощью которого школьники могут наглядно на практике познакомиться с проблемами машинного обучения и разработать модели технологических систем с элементами искусственного интеллекта. Кроме наборов электроники можно приобрести и роботов, управляемых микро:битом. Одному из таких роботов — DFRobot Maqueen — Михаил Семионенков посвятил свою книгу «Путешествие в Робокодию».

Для того чтобы придать изделию (модели) законченный вид, необходимы навыки конструирования. В книге рассматривается конструирование из бумаги как наиболее доступный способ, но микро:бит также прекрасно сочетается с 3D-печатью (рис. П5). Примеры можно посмотреть на сайте MyMiniFactory (https://www.myminifactory.com/category/bbc-micro-bit/).

Проекты, рассмотренные в книге, с полным правом можно отнести к STEAM-проектам. В них тесно переплетены естественные науки, технология, инженерное творчество, искусство, математика, и при этом у ребёнка есть личная заинтересованность в обучении, потому что нужно узнать, научиться, понять, чтобы получить результат — осязаемый, понятный, востребованный.

Современная электронная плата микро:бит (BBC micro:bit) позволяет строить самые разные образовательные траектории. Наша книга — лишь первая точка этих маршрутов.

Опубликовано

Вышла книга Герберта Уэллса “Волшебная лавка”

Волшебная лавка

Удивительная история для детей от основоположника жанра фантастики Герберта Уэллса!
Однажды Джибс и его отец случайно зашли в неприметный магазинчик, в котором продавались всякие штуки для фокусов. А может быть и для настоящей магии… Игрушечные солдатики, стеклянные шарики, даже настоящий белый кролик из шляпы фокусника — в этом магазине можно было купить всё, что пожелаешь и даже получить пару чудес в подарок. И как полагается в волшебном магазинчике, сюрпризы там поджидали на каждом шагу.
Для младшего школьного возраста

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

 

Книгу можно купить в нашем интернет-магазине.

 

Художник

Ирина Нюренберг

Ирина Нюренберг – художник-иллюстратор, г. Санкт-Петербург. Окончила Воронежское художественное училище (специальность живописец-педагог) и СПГХПА им. А.Л.Штиглица (кафедра станковой и книжной графики).

Автор

Герберт Уэллс

Герберт Уэллс (1866–1946) родился в Англии. Карьеру Уэллса, возможно, определил несчастный случай — в детстве он сломал обе ноги, и проводил всё время дома, благодаря чему много читал. После школы поступил в Педагогический Колледж в Лондоне. Учился у известного биолога Томаша Хаксли, который оказал на него сильное влияние. «Научная фантастика» Уэллса (хотя он никогда не называл её так) явно создавалась под влиянием его занятий в Педагогическом Колледже и научно-биологических интересов.
Уэллс стал известным благодаря своей первой работе — «Машина времени» в 1895 году. Вскоре после опубликования этой книги, Уэллс написал «Остров доктора Моро» (1895); «Человек-невидимка» (1897), и наиболее известную — «Война Миров» (1898). В его романах явно прослеживается беспокойство писателя за общество в мире, где технология и научное развитие продвигаются очень быстро.

Опубликовано

Новинка: Laravel 9. Быстрая разработка веб-сайтов на PHP

Laravel 9. Быстрая разработка веб-сайтов на PHP

Представляем книгу Владимира Дронова “Laravel 9. Быстрая разработка веб-сайтов на PHP“.

Книга представляет собой полное описание фреймворка Laravel 9 для быстрой разработки сайтов на языке PHP. Дан краткий вводный курс для начинающих, в котором описывается разработка простого учебного сайта — электронной доски объявлений. Описаны базовые инструменты Laravel: миграции, модели, маршруты, контроллеры, шаблоны, средства обработки пользовательского ввода и сохранения выгруженных файлов, валидаторы, шаблоны, пагинаторы и инструменты разграничения доступа. Рассказано о более развитых средствах: внедрении зависимостей, провайдерах, посредниках, событиях и их обработке, отправке электронной почты, оповещениях, очередях и отложенных заданиях, встроенном планировщике, инструментах кеширования, локализации сайтов и расширении возможностей встроенной утилиты artisan. Описаны дополнительные библиотеки для обработки BBCode-тегов и CAPTCHA, вывода графических миниатюр, аутентификации через социальные сети. Рассмотрено программирование веб-служб REST, вещание по протоколу WebSocket и публикация сайта.

    • Модели, контроллеры и шаблоны
    • Разграничение доступа
    • CAPTCHA
    • BBCode
    • Аутентификация через социальные сети
    • Обработка событий
    • Оповещения
    • Отложенные задания
    • Планировщик
    • Локализация сайтов
    • Разработка веб-служб REST
    • Публикация сайта

Дронов Владимир Александрович, профессиональный программист, писатель и журналист, работает с компьютерами с 1987 года. Автор более 30 популярных компьютерных книг, в том числе «Django 2.1. Практика создания веб-сайтов на Python», “HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера“, «Python 3. Самое необходимое», «Python 3 и PyQt 5. Разработка приложений», “Laravel. Быстрая разработка современных динамических Web-сайтов на PHP, MySQL, HTML и CSS“, “Angular 4. Быстрая разработка сверхдинамических Web-сайтов на TypeScript и PHP” и книг по продуктам Adobe Flash и Adobe Dreamweaver различных версий. Его статьи публикуются в журналах “Мир ПК” и “ИнтерФейс” (Израиль) и интернет-порталах “IZ City” и “TheVista.ru”.

Книгу “Laravel 9. Быстрая разработка веб-сайтов на PHP” можно купить со скидкой в интернет-магазине издательства “БХВ”.

Предисловие…………………………………………………………………………………………… 19

Почему именно Laravel?……………………………………………………………………………………………………………. 19

О чем эта книга?…………………………………………………………………………………………………………………………. 20

Используемое ПО……………………………………………………………………………………………………………………….. 21

Типографские соглашения………………………………………………………………………………………………………… 22

Часть I. Основы Laravel на практическом примере……….. 25

Глава 1. Простейший веб-сайт — доска объявлений……………………………… 27

1.1. Подготовительные действия………………………………………………………………………………………………. 27

1.2. Проект и его создание. Папка проекта……………………………………………………………………………… 27

Теория………………………………………………………………………………………………………………………………………. 27

Практика………………………………………………………………………………………………………………………………….. 28

1.3. Запуск проекта. Отладочный веб-сервер PHP………………………………………………………………….. 29

1.4. Контроллеры и действия……………………………………………………………………………………………………. 30

Теория………………………………………………………………………………………………………………………………………. 30

Практика………………………………………………………………………………………………………………………………….. 31

1.5. Маршруты и списки маршрутов. Фасады………………………………………………………………………… 32

Теория………………………………………………………………………………………………………………………………………. 32

Практика………………………………………………………………………………………………………………………………….. 33

1.6. Настройки проекта. Подготовка проекта к работе с базой данных SQLite…………………… 34

Теория………………………………………………………………………………………………………………………………………. 34

Практика………………………………………………………………………………………………………………………………….. 34

1.7. Миграции…………………………………………………………………………………………………………………………….. 36

Теория………………………………………………………………………………………………………………………………………. 36

Практика………………………………………………………………………………………………………………………………….. 36

1.8. Модели…………………………………………………………………………………………………………………………………. 38

1.9. Консоль Laravel…………………………………………………………………………………………………………………… 39

1.10. Работа с базой данных…………………………………………………………………………………………………….. 40

1.11. URL-параметры. Внедрение зависимостей…………………………………………………………………….. 43

Теория………………………………………………………………………………………………………………………………………. 43

Практика………………………………………………………………………………………………………………………………….. 44

1.12. Шаблоны……………………………………………………………………………………………………………………………. 46

Теория………………………………………………………………………………………………………………………………………. 46

Практика………………………………………………………………………………………………………………………………….. 46

1.13. Наследование шаблонов………………………………………………………………………………………………….. 51

Теория………………………………………………………………………………………………………………………………………. 51

Практика………………………………………………………………………………………………………………………………….. 51

1.14. Именованные маршруты………………………………………………………………………………………………….. 53

1.15. Статические файлы…………………………………………………………………………………………………………… 54

Глава 2. Доска объявлений 2.0: разграничение доступа,
работа с объявлениями и локализация…………………………………………………… 55

2.1. Межтабличные связи. Работа со связанными записями………………………………………………….. 55

2.2. Вход и выход. Раздел пользователя………………………………………………………………………………….. 58

Теория………………………………………………………………………………………………………………………………………. 58

Практика………………………………………………………………………………………………………………………………….. 59

2.3. Добавление, правка и удаление записей………………………………………………………………………….. 64

2.4. Валидация данных……………………………………………………………………………………………………………… 70

2.5. Разграничение доступа. Посредники, политики и провайдеры……………………………………… 72

Теория………………………………………………………………………………………………………………………………………. 72

Практика………………………………………………………………………………………………………………………………….. 73

2.6. Получение сведений о текущем пользователе…………………………………………………………………. 76

2.7. Локализация веб-сайта………………………………………………………………………………………………………. 76

Часть II. Базовые инструменты………………………………………………… 81

Глава 3. Создание, настройка и отладка проекта…………………………………… 83

3.1. Подготовка к установке……………………………………………………………………………………………………… 83

3.2. Создание проекта……………………………………………………………………………………………………………….. 83

3.2.1. Создание проекта с помощью Composer…………………………………………………………………….. 83

3.2.2. Создание проекта с помощью Laravel Installer…………………………………………………………… 84

3.3. Папки и файлы проекта………………………………………………………………………………………………………. 85

3.4. Настройки проекта……………………………………………………………………………………………………………… 87

3.4.1. Две разновидности настроек проекта…………………………………………………………………………. 87

3.4.1.1. Локальные настройки…………………………………………………………………………………………. 87

3.4.1.2. Рабочие настройки………………………………………………………………………………………………. 88

3.4.2. Настройки проекта по категориям………………………………………………………………………………. 89

3.4.2.1. Базовые настройки проекта……………………………………………………………………………….. 89

3.4.2.2. Настройки режима работы веб-сайта……………………………………………………………….. 90

3.4.2.3. Настройки шифрования………………………………………………………………………………………. 90

3.4.2.4. Настройки баз данных………………………………………………………………………………………… 91

3.4.3. Доступ к настройкам из программного кода……………………………………………………………… 94

3.4.4. Создание своих настроек……………………………………………………………………………………………… 95

3.5. Базовые инструменты отладки………………………………………………………………………………………….. 96

3.5.1. Отладочный веб-сервер………………………………………………………………………………………………… 96

3.5.2. Вывод сообщений об ошибках…………………………………………………………………………………….. 97

Глава 4. Миграции и сидеры………………………………………………………………….. 99

4.1. Миграции…………………………………………………………………………………………………………………………….. 99

4.1.1. Создание миграций…………………………………………………………………………………………………….. 100

4.1.2. Класс миграции…………………………………………………………………………………………………………… 100

4.1.3. Создание таблиц…………………………………………………………………………………………………………. 101

4.1.3.1. Создание полей………………………………………………………………………………………………….. 101

4.1.3.2. Реализация «мягкого» удаления записей в таблицах…………………………………….. 105

4.1.3.3. Указание дополнительных параметров полей……………………………………………….. 105

4.1.3.4. Создание индексов…………………………………………………………………………………………….. 107

4.1.3.5. Создание полей внешнего ключа…………………………………………………………………….. 108

4.1.3.6. Задание дополнительных параметров таблиц……………………………………………….. 111

4.1.4. Правка и удаление таблиц…………………………………………………………………………………………. 111

4.1.4.1. Правка и удаление полей………………………………………………………………………………….. 111

4.1.4.2. Переименование и удаление индексов…………………………………………………………….. 113

4.1.4.3. Удаление полей внешнего ключа и управление соблюдением
ссылочной целостности…………………………………………………………………………………………………. 113

4.1.4.4. Переименование и удаление таблиц……………………………………………………………….. 114

4.1.5. Проверка существования таблиц и полей………………………………………………………………… 114

4.1.6. Указание базы данных, с которой будут работать миграции………………………………… 115

4.1.7. Обработка миграций…………………………………………………………………………………………………… 115

4.1.7.1. Применение миграций……………………………………………………………………………………….. 115

4.1.7.2. Откат миграций, обновление, сброс и очистка базы данных………………………… 116

4.1.7.3. Создание журнала миграций и просмотр их состояния………………………………… 117

4.1.8. Дамп базы данных как альтернатива миграциям……………………………………………………. 118

4.2. Сидеры……………………………………………………………………………………………………………………………….. 118

4.2.1. Использование корневого сидера……………………………………………………………………………… 119

4.2.2. Использование подчиненных сидеров………………………………………………………………………. 119

4.2.3. Выполнение сидеров…………………………………………………………………………………………………… 120

Глава 5. Модели: базовые инструменты……………………………………………….. 121

5.1. Создание моделей…………………………………………………………………………………………………………….. 121

5.2. Класс модели и соглашения по умолчанию…………………………………………………………………… 122

5.3. Параметры модели……………………………………………………………………………………………………………. 123

5.3.1. Параметры полей модели…………………………………………………………………………………………… 123

5.3.2. Параметры обслуживаемой таблицы……………………………………………………………………….. 123

5.3.3. Параметры преобразования типов……………………………………………………………………………. 124

5.3.4. Реализация «мягкого» удаления записей в моделях………………………………………………… 127

5.4. Создание связей между моделями…………………………………………………………………………………… 127

5.4.1. Связь «один-со-многими»……………………………………………………………………………………………. 127

5.4.2. Связь «один-с-одним из многих»………………………………………………………………………………… 129

5.4.3. Связь «один-с-одним»…………………………………………………………………………………………………. 131

5.4.4. Связь «многие-со-многими»………………………………………………………………………………………… 131

5.4.4.1. Использование связующих моделей………………………………………………………………… 135

5.4.5. Пометка записи первичной модели как исправленной при правке или удалении связанных записей вторичной модели………………………………………………………………………………………………………………………………………………… 136

5.4.6. Сквозная связь «один-со-многими»……………………………………………………………………………. 136

5.4.7. Сквозная связь «один-с-одним»………………………………………………………………………………….. 137

5.4.8. Записи-заглушки…………………………………………………………………………………………………………. 137

5.4.9. Замкнутая связь…………………………………………………………………………………………………………… 138

5.5. Методы моделей……………………………………………………………………………………………………………….. 139

5.6. Преобразователи. Акцессоры и мутаторы……………………………………………………………………… 139

5.6.1. Виртуальные поля………………………………………………………………………………………………………. 141

5.6.2. Акцессоры и мутаторы в предыдущих версиях Laravel………………………………………….. 141

Глава 6. Запись данных……………………………………………………………………….. 143

6.1. Добавление, правка и удаление записей с помощью моделей……………………………………… 143

6.1.1. Добавление записей. Построитель запросов……………………………………………………………. 143

6.1.2. Правка записей……………………………………………………………………………………………………………. 145

6.1.2.1. Правка значений отдельных полей………………………………………………………………….. 146

6.1.2.2. Проверка, значения каких полей изменились…………………………………………………. 147

6.1.3. Удаление записей……………………………………………………………………………………………………….. 149

6.1.3.1. «Мягкое» удаление записей……………………………………………………………………………… 149

6.1.4. Работа со связанными записями………………………………………………………………………………… 150

6.1.4.1. Связи «один-со-многими» и «один-с-одним»: связывание
существующих записей…………………………………………………………………………………………………. 150

6.1.4.2. Связи «один-со-многими» и «один-с-одним»: добавление и правка связанных записей 151

6.1.4.3. Связь «один-с-одним из многих»………………………………………………………………………. 152

6.1.4.4. Связь «многие-со-многими»: связывание записей…………………………………………… 153

6.1.4.5. Связь «многие-со-многими»: добавление и правка связанных записей………… 155

6.1.5. Копирование записей…………………………………………………………………………………………………. 156

6.2. Массовые добавление, правка и удаление записей………………………………………………………. 156

6.2.1. Массовое добавление записей…………………………………………………………………………………… 156

6.2.2. Массовая правка записей…………………………………………………………………………………………… 158

6.2.3. Массовое удаление записей………………………………………………………………………………………. 159

6.2.4. Использование фасада DB для записи данных………………………………………………………… 159

Глава 7. Выборка данных…………………………………………………………………….. 161

7.1. Извлечение значений из полей записи…………………………………………………………………………….. 161

7.2. Доступ к связанным записям……………………………………………………………………………………………. 161

7.2.1. Связь «один-со-многими»: доступ к связанным записям…………………………………………. 161

7.2.2. Связь «один-с-одним из многих»: доступ к связанным записям……………………………… 162

7.2.3. Связь «один-с-одним»: доступ к связанным записям……………………………………………….. 163

7.2.4. Связь «многие-со-многими»: доступ к связанным записям……………………………………… 163

7.3. Выборка записей: базовые средства………………………………………………………………………………. 164

7.3.1. Выборка всех записей………………………………………………………………………………………………… 164

7.3.2. Извлечение первой записи………………………………………………………………………………………….. 164

7.3.3. Поиск записей……………………………………………………………………………………………………………… 165

7.3.4. Фильтрация записей……………………………………………………………………………………………………. 167

7.3.4.1. Фильтрация записей по значениям полей типа JSON…………………………………….. 172

7.3.4.2. Фильтрация по полнотекстовому индексу………………………………………………………. 173

7.3.5. Сортировка записей……………………………………………………………………………………………………. 174

7.3.6. Выборка указанного количества записей………………………………………………………………… 175

7.3.7. Выборка уникальных записей…………………………………………………………………………………… 175

7.3.8. Задание параметров запросов на основании выполнения указанного условия…… 176

7.3.9. Смена типа выдаваемых значений……………………………………………………………………………. 176

7.3.10. Выполнение запроса и получение результата………………………………………………………. 176

7.3.11. Проверка наличия записей в полученном результате…………………………………………… 177

7.3.12. Объединение результатов от разных запросов……………………………………………………… 177

7.4. Выборка связанных записей……………………………………………………………………………………………. 178

7.5. Выборка записей: расширенные средства……………………………………………………………………… 182

7.5.1. Указание выбираемых полей…………………………………………………………………………………….. 182

7.5.2. Вставка фрагментов SQL-кода в запрос……………………………………………………………………. 183

7.5.3. Связывание таблиц……………………………………………………………………………………………………… 183

7.5.4. Использование вложенных запросов………………………………………………………………………… 186

7.5.5. Использование фасада DB для выборки данных……………………………………………………… 189

7.6. Агрегатные вычисления……………………………………………………………………………………………………. 189

7.6.1. Агрегатные вычисления по всем записям…………………………………………………………………. 189

7.6.2. Агрегатные вычисления по группам записей…………………………………………………………… 190

7.6.3. Агрегатные вычисления по связанным записям……………………………………………………….. 192

7.7. Извлечение «мягко» удаленных записей…………………………………………………………………………. 194

7.8. Сравнение записей……………………………………………………………………………………………………………. 195

7.9. Получение значения заданного поля………………………………………………………………………………. 195

7.10. Повторное считывание записей…………………………………………………………………………………….. 196

Глава 8. Маршрутизация……………………………………………………………………… 197

8.1. Настройки маршрутизатора……………………………………………………………………………………………. 197

8.2. Списки маршрутов……………………………………………………………………………………………………………. 198

8.3. Создание простых маршрутов………………………………………………………………………………………… 198

8.3.1. Специализированные маршруты………………………………………………………………………………. 199

8.3.2. Резервный маршрут…………………………………………………………………………………………………….. 200

8.4. Именованные маршруты………………………………………………………………………………………………….. 200

8.5. URL-параметры и параметризованные маршруты……………………………………………………….. 201

8.5.1. Указание правил для значений URL-параметров……………………………………………………. 202

8.5.2. Внедрение моделей…………………………………………………………………………………………………….. 203

8.5.2.1. Неявное внедрение моделей……………………………………………………………………………… 203

8.5.2.2. Явное внедрение моделей…………………………………………………………………………………. 205

8.5.3. Внедрение перечислений……………………………………………………………………………………………. 207

8.5.4. Значения по умолчанию для URL-параметров………………………………………………………… 207

8.6. Дополнительные параметры маршрутов……………………………………………………………………….. 209

8.7. Группы маршрутов…………………………………………………………………………………………………………… 210

8.8. Маршруты на ресурсные контроллеры………………………………………………………………………….. 211

8.8.1. Маршруты на подчиненные ресурсные контроллеры……………………………………………. 213

8.8.2. Дополнительные параметры маршрутов на ресурсные контроллеры………………….. 213

8.9. Как Laravel обрабатывает списки маршрутов?…………………………………………………………….. 215

8.10. Вывод списка созданных маршрутов…………………………………………………………………………… 215

Глава 9. Контроллеры и действия. Обработка запросов и генерирование ответов            217

9.1. Разновидности контроллеров и особенности работы с ними……………………………………….. 217

9.1.1. Контроллеры-функции……………………………………………………………………………………………….. 217

9.1.2. Контроллеры-классы………………………………………………………………………………………………….. 218

9.1.2.1. Ресурсные контроллеры……………………………………………………………………………………. 218

9.1.2.2. Контроллеры одного действия…………………………………………………………………………. 220

9.1.2.3. Создание контроллеров-классов……………………………………………………………………… 220

9.1.2.4. Связывание посредников с контроллерами…………………………………………………….. 221

9.2. Внедрение зависимостей в контроллерах………………………………………………………………………. 221

9.3. Обработка клиентских запросов……………………………………………………………………………………… 222

9.3.1. Извлечение данных, отправленных посетителем…………………………………………………….. 223

9.3.2. Как узнать, присутствует ли в запросе нужное значение?……………………………………… 225

9.3.3. Добавление в запрос произвольных значений…………………………………………………………. 226

9.3.4. Получение сведений о запросе………………………………………………………………………………….. 227

9.4. Генерирование интернет-адресов…………………………………………………………………………………… 231

9.5. Генерирование серверных ответов…………………………………………………………………………………. 233

9.5.1. Ответы на основе шаблонов………………………………………………………………………………………. 233

9.5.1.1. Ответы в виде объектов класса View……………………………………………………………….. 233

9.5.1.2. Ответы в виде объектов класса Response………………………………………………………… 234

9.5.2. Специальные ответы…………………………………………………………………………………………………… 235

9.5.2.1. Отправка файла для отображения в веб-обозревателе………………………………….. 235

9.5.2.2. Отправка файла для сохранения на локальном диске…………………………………… 235

9.5.2.3. Отправка данных в форматах JSON и JSONP………………………………………………….. 236

9.5.2.4. Текстовый ответ…………………………………………………………………………………………………. 237

9.5.2.5. «Пустой» ответ…………………………………………………………………………………………………… 237

9.5.3. Дополнительные параметры ответов……………………………………………………………………….. 237

9.5.4. Перенаправления………………………………………………………………………………………………………… 238

9.6. Обработка ошибок……………………………………………………………………………………………………………. 240

Глава 10. Обработка введенных данных. Валидация…………………………… 242

10.1. Извлечение введенных данных……………………………………………………………………………………… 242

10.2. Валидация данных…………………………………………………………………………………………………………. 244

10.2.1. Валидаторы………………………………………………………………………………………………………………. 244

10.2.1.1. Быстрая валидация с неявным созданием валидатора……………………………….. 244

10.2.1.2. Валидация с явным созданием валидатора………………………………………………….. 246

10.2.2. Формальные запросы……………………………………………………………………………………………….. 249

10.2.3. Правила валидации и написание их наборов………………………………………………………… 252

10.2.3.1. Валидация паролей…………………………………………………………………………………………. 261

10.2.3.2. Валидация массивов элементов управления………………………………………………… 262

10.2.4. Написание сообщений об ошибках ввода……………………………………………………………… 264

10.2.4.1. Подстановки наименований…………………………………………………………………………… 265

10.2.5. Извлечение ранее введенных данных……………………………………………………………………… 265

10.2.6. Извлечение сообщений об ошибках ввода……………………………………………………………… 266

10.2.7. Создание своих правил валидации…………………………………………………………………………. 267

10.2.7.1. Правила-функции…………………………………………………………………………………………….. 267

10.2.7.2. Правила-расширения………………………………………………………………………………………. 267

10.2.7.3. Правила-объекты…………………………………………………………………………………………….. 268

10.3. Предварительная обработка введенных данных………………………………………………………… 270

10.4. Вывод веб-страниц добавления, правки и удаления записей…………………………………….. 272

Глава 11. Шаблоны: базовые инструменты………………………………………….. 274

11.1. Настройки шаблонизатора……………………………………………………………………………………………. 274

11.2. Директивы шаблонизатора……………………………………………………………………………………………. 275

11.2.1. Директивы вывода данных………………………………………………………………………………………. 275

11.2.1.1. Вывод данных в формате JSON……………………………………………………………………… 276

11.2.2. Управляющие директивы…………………………………………………………………………………………. 276

11.2.2.1. Условные директивы и директивы выбора……………………………………………………. 276

11.2.2.2. Директивы циклов……………………………………………………………………………………………. 278

11.2.3. Прочие директивы…………………………………………………………………………………………………….. 280

11.2.4. Запрет на обработку директив………………………………………………………………………………… 281

11.3. Вывод веб-форм и элементов управления…………………………………………………………………….. 282

11.3.1. Вывод веб-форм………………………………………………………………………………………………………… 282

11.3.2. Вывод элементов управления………………………………………………………………………………….. 283

11.3.3. Вывод сообщений об ошибках ввода……………………………………………………………………… 284

11.4. Наследование шаблонов……………………………………………………………………………………………….. 285

11.5. Стеки………………………………………………………………………………………………………………………………… 288

11.6. Включаемые шаблоны…………………………………………………………………………………………………… 290

11.6.1. Псевдонимы включаемых шаблонов………………………………………………………………………. 291

11.7. Компоненты…………………………………………………………………………………………………………………….. 291

11.7.1. Полнофункциональные компоненты………………………………………………………………………. 292

11.7.1.1. Создание полнофункциональных компонентов…………………………………………… 292

11.7.1.2. Передача данных в компоненты. Атрибуты компонентов………………………….. 295

11.7.1.3. Передача HTML-содержимого в компоненты. Слоты…………………………………. 298

11.7.2. Упрощенные компоненты………………………………………………………………………………………… 299

11.7.2.1. Бесшаблонные компоненты……………………………………………………………………………. 299

11.7.2.2. Бесклассовые компоненты……………………………………………………………………………… 300

11.7.3. Динамический компонент………………………………………………………………………………………… 301

11.8. Передача данных в шаблоны: другие способы…………………………………………………………… 302

11.8.1. Разделяемые значения………………………………………………………………………………………………. 302

11.8.2. Составители значений……………………………………………………………………………………………… 303

11.8.3. Создатели значений………………………………………………………………………………………………….. 304

11.9. Обработка статических файлов…………………………………………………………………………………….. 305

Глава 12. Пагинация……………………………………………………………………………. 307

12.1. Автоматическое создание пагинатора…………………………………………………………………………. 307

12.2. Дополнительные параметры пагинатора…………………………………………………………………….. 310

12.3. Настройка отображения пагинатора……………………………………………………………………………. 311

12.4. Создание пагинатора вручную……………………………………………………………………………………… 314

Глава 13. Разграничение доступа: базовые инструменты…………………….. 316

13.1. Настройки подсистемы разграничения доступа…………………………………………………………. 316

13.2. Создание недостающих модулей, реализующих разграничение доступа……………….. 318

13.3. Маршруты, ведущие на контроллеры разграничения доступа…………………………………. 319

13.4. Служебные таблицы и модель………………………………………………………………………………………. 321

13.5. Регистрация новых пользователей………………………………………………………………………………… 322

13.6. Вход на веб-сайт…………………………………………………………………………………………………………….. 325

13.7. Раздел пользователя……………………………………………………………………………………………………….. 327

13.8. Собственно разграничение доступа……………………………………………………………………………… 327

13.8.1. Разграничение доступа: простейшие инструменты………………………………………………. 327

13.8.1.1. Разграничение доступа с помощью посредников………………………………………… 327

13.8.1.2. Разграничение доступа в шаблонах……………………………………………………………… 328

13.8.2. Гейты………………………………………………………………………………………………………………………….. 329

13.8.2.1. Написание гейтов……………………………………………………………………………………………. 329

13.8.2.2. Разграничение доступа посредством гейтов………………………………………………… 330

13.8.2.3. Перехватчики…………………………………………………………………………………………………… 332

13.8.2.4. Гейты с развернутыми ответами……………………………………………………………………. 333

13.8.2.5. Простые гейты…………………………………………………………………………………………………. 334

13.8.3. Политики……………………………………………………………………………………………………………………. 335

13.8.3.1. Создание и регистрация политик…………………………………………………………………… 335

13.8.3.2. Разграничение доступа посредством политик……………………………………………… 338

13.8.3.3. Разграничение доступа в ресурсных контроллерах……………………………………. 341

13.8.4. Разграничение доступа с помощью формальных запросов………………………………….. 341

13.9. Получение сведений о текущем пользователе……………………………………………………………… 342

13.10. Подтверждение пароля………………………………………………………………………………………………… 343

13.11. Выход с веб-сайта………………………………………………………………………………………………………… 344

13.12. Проверка существования адреса электронной почты………………………………………………. 344

13.13. Сброс пароля………………………………………………………………………………………………………………… 347

13.13.1. Отправка электронного письма с гиперссылкой сброса пароля………………………… 347

13.13.2. Собственно сброс пароля………………………………………………………………………………………. 348

13.13.3. Удаление устаревших жетонов сброса пароля……………………………………………………. 349

Глава 14. Обработка строк, массивов и функции-хелперы…………………… 350

14.1. Обработка строк……………………………………………………………………………………………………………… 350

14.1.1. Составление строк……………………………………………………………………………………………………. 351

14.1.2. Сравнение строк и получение сведений о строках………………………………………………… 352

14.1.3. Преобразование строк……………………………………………………………………………………………… 353

14.1.4. Извлечение фрагментов строк………………………………………………………………………………….. 358

14.1.5. Поиск и замена в строках…………………………………………………………………………………………. 360

14.1.6. Обработка путей к файлам………………………………………………………………………………………. 364

14.1.7. Прочие инструменты для обработки строк……………………………………………………………. 365

14.2. Обработка массивов……………………………………………………………………………………………………….. 367

14.2.1. Добавление, правка и удаление элементов массивов……………………………………………. 367

14.2.2. Извлечение элементов массива……………………………………………………………………………….. 369

14.2.3. Проверка существования элементов массивов………………………………………………………. 371

14.2.4. Получение сведений о массиве………………………………………………………………………………… 372

14.2.5. Упорядочивание элементов массивов…………………………………………………………………….. 373

14.2.6. Прочие инструменты для обработки массивов……………………………………………………… 373

14.3. Функции-хелперы……………………………………………………………………………………………………………. 375

14.3.1. Функции, выдающие пути к ключевым папкам……………………………………………………… 376

14.3.2. Служебные функции…………………………………………………………………………………………………. 376

Глава 15. Коллекции Laravel……………………………………………………………….. 380

15.1. Обычные коллекции……………………………………………………………………………………………………….. 380

15.1.1. Создание обычных коллекций…………………………………………………………………………………. 380

15.1.2. Добавление, правка и удаление элементов коллекции…………………………………………. 381

15.1.3. Извлечение отдельных элементов и частей коллекции…………………………………………. 383

15.1.4. Получение сведений об элементах коллекции……………………………………………………….. 389

15.1.5. Перебор элементов коллекции…………………………………………………………………………………. 390

15.1.6. Поиск и фильтрация элементов коллекции…………………………………………………………….. 391

15.1.7. Упорядочивание элементов коллекции…………………………………………………………………… 396

15.1.8. Группировка элементов коллекций…………………………………………………………………………. 398

15.1.9. Агрегатные вычисления в коллекциях…………………………………………………………………….. 399

15.1.10. Получение сведений о коллекции………………………………………………………………………….. 400

15.1.11. Прочие инструменты для обработки коллекций………………………………………………….. 401

15.2. Коллекции, заполняемые по запросу……………………………………………………………………………. 406

15.2.1. Создание коллекций, заполняемых по запросу……………………………………………………… 406

15.2.2. Работа с коллекциями, заполняемыми по запросу………………………………………………… 406

Часть III. Расширенные инструменты
и дополнительные библиотеки…………………………………………….. 409

Глава 16. Базы данных и модели: расширенные инструменты…………….. 411

16.1. Отложенная и немедленная выборка связанных записей…………………………………………… 411

16.2. Выборка наборов записей по частям……………………………………………………………………………. 413

16.3. Фильтрующие связи «многие-со-многими»…………………………………………………………………… 415

16.4. Полиморфные связи………………………………………………………………………………………………………… 417

16.4.1. Создание поля внешнего ключа для полиморфной связи……………………………………… 417

16.4.2. Создание полиморфных связей……………………………………………………………………………….. 418

16.4.2.1. Полиморфная связь «один-со-многими»………………………………………………………… 418

16.4.2.2. Полиморфная связь «один-с-одним из многих»…………………………………………….. 420

16.4.2.3. Полиморфная связь «один-с-одним»………………………………………………………………. 420

16.4.2.4. Полиморфная связь «многие-со-многими»…………………………………………………….. 421

16.4.3. Работа с записями, связанными полиморфной связью………………………………………….. 423

16.4.4. Указание своих типов связываемых записей………………………………………………………….. 424

16.5. Пределы…………………………………………………………………………………………………………………………… 426

16.5.1. Локальные пределы………………………………………………………………………………………………….. 426

16.5.2. Глобальные пределы………………………………………………………………………………………………… 427

16.6. Выполнение «сырых» SQL-запросов…………………………………………………………………………….. 429

16.6.1. «Сырые» вызовы функций СУБД…………………………………………………………………………….. 429

16.6.2. «Сырые» команды SQL…………………………………………………………………………………………….. 429

16.5.3. «Сырые» SQL-запросы целиком………………………………………………………………………………. 431

16.7. Блокировка записей………………………………………………………………………………………………………… 432

16.8. Управление транзакциями……………………………………………………………………………………………… 432

16.8.1. Автоматическое управление транзакциями…………………………………………………………… 433

16.8.2. Ручное управление транзакциями…………………………………………………………………………… 433

16.9. Очистка моделей…………………………………………………………………………………………………………….. 433

Глава 17. Шаблоны: расширенные инструменты
и дополнительные библиотеки…………………………………………………………….. 436

17.1. Библиотека Laravel HTML: создание веб-форм и элементов управления………………… 436

17.1.1. Создание элементов управления…………………………………………………………………………….. 436

17.1.2. Создание веб-форм……………………………………………………………………………………………………. 439

17.1.3. Создание гиперссылок……………………………………………………………………………………………… 441

17.2. Библиотека genert/bbcode: поддержка BBCode…………………………………………………………… 443

17.2.1. Использование библиотеки genert/bbcode………………………………………………………………. 443

17.2.2. Поддерживаемые BBCode-теги……………………………………………………………………………….. 444

17.2.3. Добавление своих BBCode-тегов…………………………………………………………………………….. 445

17.3. Библиотека Captcha for Laravel: поддержка CAPTCHA…………………………………………….. 446

17.3.1. Настройка Captcha for Laravel………………………………………………………………………………… 447

17.3.2. Использование Captcha for Laravel…………………………………………………………………………. 448

17.4. Написание своих директив шаблонизатора………………………………………………………………… 449

17.4.1. Написание простейших директив……………………………………………………………………………. 450

17.4.1.1. Форматировщики объектов…………………………………………………………………………….. 451

17.4.2. Написание условных директив……………………………………………………………………………….. 451

17.5. Пакет Laravel Mix……………………………………………………………………………………………………………. 452

17.5.1. Исходные файлы и их расположение……………………………………………………………………… 453

17.5.2. Конфигурирование Laravel Mix………………………………………………………………………………. 453

17.5.2.1. Обработка таблиц стилей………………………………………………………………………………. 454

17.5.2.2. Обработка веб-сценариев……………………………………………………………………………….. 455

17.5.2.3. Копирование файлов и папок…………………………………………………………………………. 456

17.5.2.4. Мечение файлов………………………………………………………………………………………………. 457

17.5.3. Запуск Laravel Mix……………………………………………………………………………………………………. 458

17.6. Использование Bootstrap……………………………………………………………………………………………….. 459

Глава 18. Обработка выгруженных файлов…………………………………………. 461

18.1. Настройки подсистемы обработки выгруженных файлов………………………………………….. 461

18.2. Создание символических ссылок на папки с выгруженными файлами…………………….. 464

18.3. Хранение выгруженных файлов……………………………………………………………………………………. 465

18.4. Базовые средства для обработки выгруженных файлов…………………………………………….. 465

18.4.1. Валидаторы для выгруженных файлов………………………………………………………………….. 465

18.4.2. Получение выгруженных файлов……………………………………………………………………………. 467

18.4.3. Получение сведений о выгруженных файлах………………………………………………………… 467

18.4.4. Сохранение выгруженных файлов………………………………………………………………………….. 468

18.4.5. Выдача выгруженных файлов посетителям…………………………………………………………… 470

18.4.5.1. Вывод выгруженных файлов………………………………………………………………………….. 470

18.4.5.2. Реализация загрузки выгруженного файла…………………………………………………… 471

18.4.6. Удаление выгруженных файлов………………………………………………………………………………. 472

18.5. Расширенные средства для работы с выгруженными файлами…………………………………. 472

18.5.1. Чтение из файлов и запись в них……………………………………………………………………………… 473

18.5.2. Получение сведений о файле…………………………………………………………………………………… 473

18.5.3. Прочие манипуляции с файлами……………………………………………………………………………… 474

18.5.4. Работа с папками………………………………………………………………………………………………………. 475

18.6. Библиотека bkwld/croppa: вывод миниатюр………………………………………………………………… 475

18.6.1. Настройки библиотеки bkwld/croppa……………………………………………………………………… 476

18.6.2. Использование библиотеки bkwld/croppa………………………………………………………………. 478

18.6.3. Удаление миниатюр…………………………………………………………………………………………………. 481

Глава 19. Безопасность и разграничение доступа:
расширенные инструменты и дополнительная библиотека………………….. 482

19.1. Низкоуровневые средства для работы с пользователями…………………………………………… 482

19.1.1. Низкоуровневые средства для регистрации пользователей…………………………………. 482

19.1.2. Низкоуровневые средства для входа………………………………………………………………………. 483

19.1.3. Низкоуровневые средства для выполнения выхода………………………………………………. 485

19.1.4. Низкоуровневые средства для подтверждения пароля…………………………………………. 485

19.1.5. Низкоуровневые средства для проверки существования адреса
электронной почты……………………………………………………………………………………………………………….. 486

19.1.6. Низкоуровневые средства для сброса пароля……………………………………………………….. 487

19.1.7. Корректная правка пароля………………………………………………………………………………………. 490

19.2. Библиотека Laravel Socialite: вход через сторонние интернет-службы…………………….. 491

19.2.1. Создание приложения «ВКонтакте»……………………………………………………………………….. 491

19.2.2. Установка и настройка Laravel Socialite…………………………………………………………………. 493

19.2.3. Использование Laravel Socialite………………………………………………………………………………. 494

19.2.3.1. Действие первое: обращение к сторонней интернет-службе………………………. 495

19.2.3.2. Действие второе: поиск (регистрация) пользователя и вход……………………….. 495

19.2.3.3. Завершающие операции: создание маршрутов и гиперссылки входа……….. 496

19.3. Защита от атак CSRF……………………………………………………………………………………………………… 497

19.4. Ограничители частоты запросов…………………………………………………………………………………… 498

19.4.1. Простейшие ограничители частоты запросов……………………………………………………….. 498

19.4.2. Именованные ограничители частоты запросов…………………………………………………….. 499

19.4.3. Низкоуровневые ограничители частоты запросов………………………………………………… 501

Глава 20. Внедрение зависимостей, провайдеры и фасады…………………… 504

20.1. Внедрение зависимостей………………………………………………………………………………………………… 504

20.1.1. Простейшие случаи внедрения зависимостей………………………………………………………… 504

20.1.2. Управление внедрением зависимостей…………………………………………………………………… 506

20.1.2.1. Простая регистрация классов и объектов……………………………………………………… 506

20.1.2.2. Подмена классов и реализации……………………………………………………………………… 509

20.1.2.3. Гибкая подмена классов и реализации…………………………………………………………. 510

20.1.2.4. Гибкая регистрация значений произвольного типа……………………………………… 511

20.1.2.5. Переопределение регистрации………………………………………………………………………. 512

20.1.2.6. Вызов методов и функций, в которых используется внедрение зависимостей 512

20.1.2.7. Подмена методов…………………………………………………………………………………………….. 514

20.2. Провайдеры…………………………………………………………………………………………………………………….. 515

20.2.1. Список провайдеров, используемых веб-сайтом…………………………………………………… 515

20.2.2. Создание своих провайдеров…………………………………………………………………………………… 517

20.3. Фасады…………………………………………………………………………………………………………………………….. 518

Глава 21. Посредники………………………………………………………………………….. 520

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

21.1.1. Управление очередностью выполнения посредников…………………………………………… 523

21.1.2. Параметры посредников………………………………………………………………………………………….. 523

21.2. Написание своих посредников………………………………………………………………………………………. 523

21.2.1. Как исполняется посредник?……………………………………………………………………………………. 523

21.2.2. Создание посредников……………………………………………………………………………………………… 524

21.2.3. Посредники с завершающими действиями……………………………………………………………… 526

 

Глава 22. События и их обработка……………………………………………………….. 528

22.1. События-классы……………………………………………………………………………………………………………… 528

22.1.1. Обработка событий-классов: слушатели……………………………………………………………….. 528

22.1.1.1. Создание слушателей-классов………………………………………………………………………. 528

22.1.1.2. Явная привязка слушателей-классов к событиям………………………………………… 530

22.1.1.3. Автоматическая привязка слушателей-классов к событиям……………………….. 531

22.1.1.4. Слушатели-функции……………………………………………………………………………………….. 532

22.1.1.5. Просмотр списков слушателей, привязанных к событиям-классам…………… 532

22.1.2. Обработка событий-классов: подписчики……………………………………………………………… 533

22.1.3. События-классы, поддерживаемые фреймворком…………………………………………………. 534

22.1.3.1. События подсистемы разграничения доступа……………………………………………… 534

22.1.3.2. События других подсистем…………………………………………………………………………….. 536

22.1.4. Создание и использование своих событий-классов………………………………………………. 536

22.1.4.1. Создание событий-классов…………………………………………………………………………….. 536

22.1.4.2. Создание событий-классов и их слушателей……………………………………………….. 537

22.1.4.3. Генерирование своих событий………………………………………………………………………. 538

22.2. События-строки………………………………………………………………………………………………………………. 538

22.2.1. Привязка обработчиков к событиям-строкам………………………………………………………… 539

22.2.2. Генерирование событий-строк………………………………………………………………………………… 539

22.3. События моделей……………………………………………………………………………………………………………. 540

22.3.1. Обработка событий моделей…………………………………………………………………………………… 540

22.3.1.1. Обработка событий моделей посредством слушателей-функций………………. 540

22.3.1.2. Связывание событий моделей с событиями-классами…………………………………. 540

22.3.1.3. Использование обозревателей……………………………………………………………………….. 541

22.3.2. Список событий моделей…………………………………………………………………………………………. 542

22.3.3. Временное отключение событий в моделях…………………………………………………………… 543

Глава 23. Отправка электронной почты………………………………………………. 544

23.1. Настройки подсистемы отправки электронной почты……………………………………………….. 544

23.2. Создание электронных писем………………………………………………………………………………………… 547

23.2.1. Создание классов электронных писем……………………………………………………………………. 547

23.2.2. Генерирование электронных писем………………………………………………………………………… 548

23.2.3. Написание шаблонов электронных писем……………………………………………………………… 551

23.2.4. Написание электронных писем на языке Markdown……………………………………………… 552

23.2.4.1. Классы писем, написанных на Markdown…………………………………………………….. 552

23.2.4.2. Написание шаблонов писем на Markdown…………………………………………………… 552

23.2.4.3. Управление генерированием писем, написанных на Markdown………………… 553

23.3. Отправка электронных писем………………………………………………………………………………………… 555

23.4. Предварительный просмотр электронных писем………………………………………………………… 556

23.5. События, генерируемые при отправке электронных писем………………………………………… 557

23.6. Доступ к письмам, отправленным посредством службы array…………………………………… 557

Глава 24. Оповещения…………………………………………………………………………. 558

24.1. Создание оповещений…………………………………………………………………………………………………….. 558

24.2. Написание оповещений………………………………………………………………………………………………….. 560

24.2.1. Почтовые оповещения………………………………………………………………………………………………. 560

24.2.1.1. Генерирование простых почтовых оповещений………………………………………….. 560

24.2.1.2. Генерирование почтовых оповещений на основе текстовых
и HTML-шаблонов…………………………………………………………………………………………………………. 562

24.2.1.3. Генерирование почтовых оповещений на основе Markdown-шаблонов…… 562

24.2.1.4. Указание адреса получателя…………………………………………………………………………. 563

24.2.2. SMS-оповещения……………………………………………………………………………………………………….. 563

24.2.2.1. Подготовительные действия и настройка службы SMS-оповещений………… 563

24.2.2.2. Генерирование произвольных SMS-оповещений…………………………………………. 564

24.2.2.3. Указание телефона получателя……………………………………………………………………… 565

24.2.3. Slack-оповещения……………………………………………………………………………………………………… 565

24.2.3.1. Генерирование Slack-оповещений…………………………………………………………………. 565

24.2.3.2. Добавление вложений…………………………………………………………………………………….. 566

24.2.3.3. Указание интернет-адреса получателя…………………………………………………………. 568

24.2.4. Табличные оповещения……………………………………………………………………………………………. 568

24.2.4.1. Создание таблицы для хранения табличных оповещений………………………….. 568

24.2.4.2. Генерирование табличных оповещений……………………………………………………….. 569

24.2.5. Оповещения, отправляемые по нескольким каналам…………………………………………….. 570

24.3. Отправка оповещений…………………………………………………………………………………………………….. 570

24.3.1. Отправка оповещений произвольным получателям……………………………………………… 571

24.4. Предварительный просмотр почтовых оповещений…………………………………………………… 571

24.5. Работа с табличными оповещениями……………………………………………………………………………. 571

24.6. События, генерируемые при отправке оповещений…………………………………………………….. 573

Глава 25. Очереди и отложенные задания……………………………………………. 574

25.1. Настройка подсистемы очередей………………………………………………………………………………….. 574

25.1.1. Настройка самих очередей……………………………………………………………………………………… 574

25.1.2. Подготовка таблиц для хранения отложенных заданий………………………………………. 577

25.1.3. Настройка баз данных Redis……………………………………………………………………………………. 578

25.2. Отложенные задания-классы…………………………………………………………………………………………. 579

25.2.1. Создание отложенных заданий-классов………………………………………………………………… 579

25.2.1.1. Создание отложенных заданий-классов: базовые инструменты……………….. 579

25.2.1.2. Параметры отложенных заданий-классов……………………………………………………. 581

25.2.1.3. Обработка ошибок в отложенных заданиях-классах………………………………….. 583

25.2.1.4. Взаимодействие с очередью…………………………………………………………………………… 584

25.2.1.5. Уникальные задания……………………………………………………………………………………….. 584

25.2.1.6. Неотложные задания………………………………………………………………………………………. 586

25.2.2. Запуск отложенных заданий-классов…………………………………………………………………….. 586

25.3. Отложенные задания-функции………………………………………………………………………………………. 587

25.4. Цепочки отложенных заданий………………………………………………………………………………………. 588

25.5. Специфические разновидности отложенных заданий………………………………………………… 589

25.5.1. Отложенные слушатели событий……………………………………………………………………………. 589

25.5.2. Отложенные электронные письма…………………………………………………………………………… 591

25.5.3. Отложенные оповещения…………………………………………………………………………………………. 593

25.6. Выполнение отложенных заданий………………………………………………………………………………… 594

25.6.1. Запуск обработчика отложенных заданий…………………………………………………………….. 594

25.6.2. Работа с проваленными заданиями………………………………………………………………………… 596

25.6.3. Очистка очереди заданий………………………………………………………………………………………… 597

25.7. Пакеты отложенных заданий………………………………………………………………………………………… 597

25.7.1. Подготовка таблицы для хранения пакетов отложенных заданий……………………… 598

25.7.2. Создание отложенных заданий, пригодных для использования в пакетах………… 598

25.7.3. Создание и запуск пакетов отложенных заданий………………………………………………….. 598

25.7.4. Взаимодействие с выполняющимся пакетом………………………………………………………….. 600

25.7.5. Получение сведений о пакете………………………………………………………………………………….. 601

25.7.6. Выполнение пакетов отложенных заданий……………………………………………………………. 602

25.8. Посредники отложенных заданий…………………………………………………………………………………. 603

25.8.1. Ограничение частоты выполнения заданий…………………………………………………………… 603

25.8.2. Предотвращение наложения заданий…………………………………………………………………….. 604

25.8.3. Отложенное выполнение ошибочных заданий………………………………………………………. 605

25.9. События, генерируемые при выполнении отложенных заданий……………………………….. 607

Глава 26. Cookie, сессии, всплывающие сообщения и криптография…… 609

26.1. Cookie………………………………………………………………………………………………………………………………. 609

26.1.1. Настройки cookie………………………………………………………………………………………………………. 609

26.1.2. Создание cookie………………………………………………………………………………………………………… 609

26.1.3. Считывание cookie……………………………………………………………………………………………………. 611

26.1.4. Удаление cookie………………………………………………………………………………………………………… 612

26.2. Сессии………………………………………………………………………………………………………………………………. 612

26.2.1. Подготовка к работе с сессиями………………………………………………………………………………. 613

26.2.1.1. Настройки сессий……………………………………………………………………………………………. 613

26.2.1.2. Создание таблицы для хранения сессий……………………………………………………….. 614

26.2.2. Работа с сессиями……………………………………………………………………………………………………… 615

26.2.2.1. Запись данных в сессию и их изменение……………………………………………………….. 615

26.2.2.2. Чтение данных из сессии………………………………………………………………………………… 616

26.2.2.3. Удаление данных из сессии……………………………………………………………………………. 616

26.2.2.4. Блокировка сессий…………………………………………………………………………………………… 617

26.2.2.5. Предотвращение сетевых атак на сессии……………………………………………………… 617

26.3. Всплывающие сообщения……………………………………………………………………………………………… 618

26.4. Криптография………………………………………………………………………………………………………………….. 619

26.4.1. Шифрование данных………………………………………………………………………………………………… 619

26.4.2. Хеширование и сверка паролей………………………………………………………………………………. 620

26.4.2.1. Настройки хеширования………………………………………………………………………………… 620

26.4.2.2. Хеширование и сверка…………………………………………………………………………………….. 620

26.4.3. Генерирование подписанных интернет-адресов…………………………………………………… 621

Глава 27. Планировщик заданий…………………………………………………………. 624

27.1. Создание заданий планировщика…………………………………………………………………………………. 624

27.1.1. Как пишутся задания планировщика?……………………………………………………………………. 624

27.1.2. Параметры заданий планировщика………………………………………………………………………… 626

27.1.2.1. Расписание запуска заданий………………………………………………………………………….. 626

27.1.2.2. Дополнительные параметры заданий…………………………………………………………… 628

27.1.3. Обработка вывода, генерируемого заданиями планировщика…………………………….. 630

27.1.4. Исполнение указанного кода перед выполнением задания и после него……………. 631

27.1.5. Отправка сигналов по указанным интернет-адресам……………………………………………. 631

27.2. Работа с заданиями планировщика………………………………………………………………………………. 632

27.2.1. Запуск планировщика заданий……………………………………………………………………………….. 632

27.2.1.1. Запуск с использованием штатного планировщика
операционной системы………………………………………………………………………………………………….. 632

27.2.1.2. Запуск в независимом режиме………………………………………………………………………… 634

27.2.2. Вывод списка заданий планировщика……………………………………………………………………. 634

27.2.3. Удаление распределенных блокировок………………………………………………………………….. 635

27.3. События, генерируемые при выполнении заданий планировщика……………………………. 635

Глава 28. Локализация…………………………………………………………………………. 636

28.1. Быстрая локализация……………………………………………………………………………………………………… 636

28.2. Локализация с применением обозначений…………………………………………………………………… 637

28.2.1. Подстановка параметров в переведенные строки…………………………………………………. 639

28.2.2. Вывод существительных во множественном числе……………………………………………….. 639

28.2.3. Локализация сообщений об ошибках ввода…………………………………………………………… 641

28.3. Реализация переключения на другой язык…………………………………………………………………… 642

28.4. Библиотека Laravel Lang: локализация на множество языков…………………………………… 644

Глава 29. Кеширование………………………………………………………………………… 646

29.1. Кеширование на стороне сервера…………………………………………………………………………………. 646

29.1.1. Подготовка подсистемы кеширования……………………………………………………………………. 646

29.1.1.1. Настройка подсистемы кеширования……………………………………………………………. 646

29.1.1.2. Создание таблицы для хранения кеша………………………………………………………….. 648

29.1.2. Работа с кешем стороны сервера…………………………………………………………………………….. 649

29.1.2.1. Сохранение данных в кеше и их правка……………………………………………………….. 649

29.1.2.2. Чтение данных из кеша…………………………………………………………………………………… 650

29.1.2.3. Удаление данных из кеша………………………………………………………………………………. 651

29.1.3. Распределенные блокировки……………………………………………………………………………………. 652

29.1.3.1. Немедленные распределенные блокировки………………………………………………….. 652

29.1.3.2. Распределенные блокировки с ожиданием…………………………………………………… 654

29.1.3.3. Передача распределенных блокировок между процессами……………………….. 655

29.1.4. События, генерируемые кешем………………………………………………………………………………… 656

29.2. Кеширование на стороне клиента…………………………………………………………………………………. 657

Глава 30. Разработка веб-служб……………………………………………………………. 658

30.1. Бэкенды: преобразование данных — базовые инструменты……………………………………… 658

30.1.1. Выдача данных в формате JSON…………………………………………………………………………….. 659

30.1.2. Задание структуры генерируемых JSON-объектов……………………………………………….. 661

30.2. Бэкенды: преобразование данных — ресурсы и ресурсные коллекции……………………. 664

30.2.1. Ресурсы………………………………………………………………………………………………………………………. 664

30.2.1.1. Написание ресурсов……………………………………………………………………………………….. 664

30.2.1.2. Задание структуры JSON-объектов, генерируемых ресурсами………………….. 665

30.2.1.3. Дополнительные параметры ресурсов………………………………………………………….. 668

30.2.1.4. Использование ресурсов…………………………………………………………………………………. 669

30.2.2. Ресурсные коллекции……………………………………………………………………………………………….. 670

30.2.2.1. Быстрое JSON-кодирование коллекции записей…………………………………………… 670

30.2.2.2. Написание ресурсных коллекций………………………………………………………………….. 670

30.2.2.3. Пагинация в ресурсных коллекциях………………………………………………………………. 673

30.3. Бэкенды: обработка данных………………………………………………………………………………………….. 674

30.3.1. Выдача записей………………………………………………………………………………………………………… 674

30.3.2. Добавление, правка и удаление записей………………………………………………………………… 674

30.3.3. Совмещенная обработка данных……………………………………………………………………………. 676

30.4. Бэкенды: разграничение доступа………………………………………………………………………………….. 676

30.5. Фронтенды: взаимодействие с бэкендами……………………………………………………………………. 679

30.6. Фронтенды: использование React и Vue………………………………………………………………………. 681

Глава 31. Вещание……………………………………………………………………………….. 683

31.1. Бэкенд: подготовка подсистемы вещания…………………………………………………………………….. 683

31.1.1. Настройка подсистемы вещания…………………………………………………………………………….. 683

31.1.2. Подготовка проекта к реализации вещания…………………………………………………………… 685

31.1.3. Установка и настройка Laravel Websockets…………………………………………………………… 685

31.2. Бэкенд: вещаемые события и оповещения……………………………………………………………………. 687

31.2.1. Вещаемые события…………………………………………………………………………………………………… 687

31.2.1.1. Вещаемые события моделей…………………………………………………………………………… 690

31.2.2. Вещаемые оповещения…………………………………………………………………………………………….. 693

31.3. Бэкенд: каналы вещания………………………………………………………………………………………………… 695

31.3.1. Общедоступные каналы вещания……………………………………………………………………………. 695

31.3.2. Закрытые каналы вещания………………………………………………………………………………………. 695

31.3.3. Каналы присутствия…………………………………………………………………………………………………. 697

31.4. Фронтенд: прослушивание каналов вещания………………………………………………………………. 699

31.4.1. Использование Laravel Echo……………………………………………………………………………………. 699

31.4.2. Прослушивание общедоступных каналов……………………………………………………………… 701

31.4.3. Прослушивание закрытых каналов………………………………………………………………………… 703

31.4.4. Прослушивание каналов присутствия……………………………………………………………………. 703

31.4.5. Отправка произвольных уведомлений……………………………………………………………………. 704

31.5. Запуск вещания……………………………………………………………………………………………………………….. 705

Глава 32. Команды утилиты artisan……………………………………………………… 706

32.1. Получение сведений о командах утилиты artisan……………………………………………………….. 706

32.2. Команды-классы…………………………………………………………………………………………………………….. 707

32.2.1. Создание команд-классов………………………………………………………………………………………… 707

32.2.2. Описание формата вызова команд………………………………………………………………………….. 709

32.2.3. Получение значений аргументов…………………………………………………………………………….. 711

32.2.4. Получение данных от пользователя……………………………………………………………………….. 712

32.2.5. Вывод данных…………………………………………………………………………………………………………… 713

32.2.5.1. Вывод индикатора процесса………………………………………………………………………….. 714

32.2.6. Вызов из команды других команд…………………………………………………………………………… 715

32.2.7. Регистрация команд-классов……………………………………………………………………………………. 716

32.3. Команды-функции…………………………………………………………………………………………………………… 716

32.4. Программный вызов команд………………………………………………………………………………………….. 718

32.5. События утилиты artisan………………………………………………………………………………………………… 718

Глава 33. Обработка ошибок……………………………………………………………….. 719

33.1. Настройка веб-страниц с сообщениями об ошибках………………………………………………….. 719

33.2. Создание и использование своих исключений…………………………………………………………….. 720

33.2.1. Создание своих исключений……………………………………………………………………………………. 720

33.2.2. Возбуждение своих исключений……………………………………………………………………………… 722

33.3. Настройка обработки существующих исключений……………………………………………………. 723

33.4. Подавление исключений………………………………………………………………………………………………… 725

Глава 34. Журналирование и дополнительные средства отладки…………. 728

34.1. Подсистема журналирования………………………………………………………………………………………… 728

34.1.1. Настройка подсистемы журналирования………………………………………………………………. 728

34.1.2. Занесение записей в журнал……………………………………………………………………………………. 731

34.1.2.1. Разделяемая дополнительная информация…………………………………………………… 732

34.1.3. Событие, генерируемое при занесении записи в журнал……………………………………… 733

34.2. Дополнительные средства отладки………………………………………………………………………………. 733

Глава 35. Публикация веб-сайта………………………………………………………….. 735

35.1. Подготовка веб-сайта к публикации…………………………………………………………………………….. 735

35.1.1. Удаление ненужного кода и данных………………………………………………………………………. 735

35.1.2. Настройка под платформу публикации…………………………………………………………………. 736

35.1.3. Переключение в режим эксплуатации…………………………………………………………………….. 736

35.1.4. Задание списка доверенных прокси-серверов……………………………………………………….. 736

35.1.5. Задание списка доверенных хостов………………………………………………………………………… 737

35.1.6. Компиляция шаблонов……………………………………………………………………………………………… 738

35.1.7. Кеширование маршрутов…………………………………………………………………………………………. 738

35.1.8. Кеширование настроек…………………………………………………………………………………………….. 739

35.1.9. Кеширование обработчиков событий…………………………………………………………………….. 739

35.1.10. Приведение таблиц стилей и веб-сценариев к виду,
оптимальному для публикации…………………………………………………………………………………………… 740

35.2. Перенос веб-сайта на платформу для публикации……………………………………………………… 740

35.3. Настройка веб-сервера и запуск сторонних программ……………………………………………….. 741

35.4. Режим обслуживания……………………………………………………………………………………………………… 741

Заключение………………………………………………………………………………………….. 744

Приложение. Описание электронного архива………………………………………. 746

Предметный указатель…………………………………………………………………………. 747

Опубликовано

Представляем книгу React. Сборник рецептов

React. Сборник рецептов

Представляем книгу “React. Сборник рецептов“.

Книга посвящена практическому применению фреймворка React. Описано создание простых приложений и приложений со сложным интерфейсом, рассмотрены вопросы маршрутизации в приложениях и управление их состоянием. Даны примеры реализации интерактивного взаимодействия с пользователем, подключения к различным службам бэкенда, таким как REST и GraphQL, описана работа с библиотеками компонентов. Подробно рассматривается безопасность приложений, процесс их тестирования, даны советы по обеспечению доступности. Приводятся практические рекомендации по повышению производительности и созданию прогрессивных веб-приложений.

Фреймворк React поможет вам создать работоспособное приложение всего за несколько минут. Но научиться использовать составляющие React — работа не из легких. Как выполнить валидацию формы? Или реализовать сложное многошаговое действие пользователя, избежав создания запутанного кода? Как протестировать приложение? Приспособить его для многократного использования? Подключить его к бэкенду? Сделать его легким для понимания? Данная книга дает быстрые ответы на эти и другие вопросы.

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

Вы научитесь:

• Создавать одностраничные приложения в React, использующие сложный пользовательский интерфейс
• Создавать прогрессивные веб-приложения, которые пользователи могут устанавливать на своем устройстве и работать с ними в автономном режиме
• Интегрировать разрабатываемые приложения со службами бэкенда, такими как REST и GraphQL
• Выполнять автоматическое тестирование для обнаружения проблем с доступностью в разрабатываемом приложении
• Обеспечивать безопасность приложений при помощи цифровых отпечатков и ключей безопасности с применением технологии WebAuthn
• Исправлять ошибки и избегать распространенных проблем с функциональностью и производительностью

Книга проводит читателя через полный жизненный цикл разработки приложений React. Каждый рецепт — это краткий, легко усваиваемый комплекс знаний. Книга обязательна для прочтения всем разработчикам!
Сэм Уорнер, инженер-программист

Dawn Griffiths

Дон Гриффитс — автор и преподаватель с более чем 20-летним опытом разработки программного обеспечения для настольных компьютеров и Интернета.

Вместе Дэвид и Дон написали несколько книг, включая Head First Android Development и Head First Kotlin. Также они проводят он-лайн консультации для компании O’Reilly.

David Griffiths

Дэвид Гриффитс — автор и преподаватель, занимается разработкой кода в React на профессиональном уровне в течение 5 лет. Создавал приложения для стартапов, магазинов розничной торговли, производителей транспортных средств, национальных спортивных команд и крупных поставщиков программного обеспечения.

Книгу “React. Сборник рецептов” можно купить со скидкой в интернет-магазине издательства “БХВ”.

Введение………………………………………………………………………………………………… 13

Типографские соглашения………………………………………………………………………………………………………… 15

Использование примеров кода…………………………………………………………………………………………………. 15

Возможности онлайнового обучения от компании O’Reilly…………………………………………………… 16

Как связаться с нами………………………………………………………………………………………………………………….. 16

Благодарности…………………………………………………………………………………………………………………………… 17

Глава 1. Создание приложений………………………………………………………………. 19

1.1. Создаем простое приложение……………………………………………………………………………………………. 19

ЗАДАЧА……………………………………………………………………………………………………………………………….. 19

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 19

Обсуждение………………………………………………………………………………………………………………………….. 23

1.2. Создание приложений с обширным информационным наполнением
посредством Gatsby…………………………………………………………………………………………………………….. 24

ЗАДАЧА……………………………………………………………………………………………………………………………….. 24

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 24

Обсуждение………………………………………………………………………………………………………………………….. 27

1.3. Создание универсальных приложений с помощью Razzle……………………………………………… 28

ЗАДАЧА……………………………………………………………………………………………………………………………….. 28

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 28

Обсуждение………………………………………………………………………………………………………………………….. 30

1.4. Создание серверного и клиентского кода посредством Next.js………………………………………. 30

ЗАДАЧА……………………………………………………………………………………………………………………………….. 30

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 31

Обсуждение………………………………………………………………………………………………………………………….. 32

1.5. Создание крошечных приложений посредством Preact………………………………………………….. 33

ЗАДАЧА……………………………………………………………………………………………………………………………….. 33

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 33

Обсуждение………………………………………………………………………………………………………………………….. 36

1.6. Создание библиотек посредством набора инструментов nwb……………………………………….. 37

ЗАДАЧА……………………………………………………………………………………………………………………………….. 37

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 37

Обсуждение………………………………………………………………………………………………………………………….. 39

1.7. Добавление React в код Rails посредством Webpacker……………………………………………………. 39

ЗАДАЧА……………………………………………………………………………………………………………………………….. 39

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 39

Обсуждение………………………………………………………………………………………………………………………….. 41

1.8. Создание пользовательских элементов посредством Preact…………………………………………… 41

ЗАДАЧА……………………………………………………………………………………………………………………………….. 41

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 41

Обсуждение………………………………………………………………………………………………………………………….. 44

1.9. Разработка компонентов посредством Storybook……………………………………………………………. 45

ЗАДАЧА……………………………………………………………………………………………………………………………….. 45

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 45

Обсуждение………………………………………………………………………………………………………………………….. 48

1.10. Тестирование кода в браузере посредством Cypress…………………………………………………….. 48

ЗАДАЧА……………………………………………………………………………………………………………………………….. 48

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 48

Обсуждение………………………………………………………………………………………………………………………….. 49

Глава 2. Маршрутизация……………………………………………………………………….. 51

2.1. Создание интерфейсов, используя реагирующую маршрутизацию………………………………. 51

ЗАДАЧА……………………………………………………………………………………………………………………………….. 51

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 52

Обсуждение………………………………………………………………………………………………………………………….. 58

2.2. Размещение состояния в маршрутах…………………………………………………………………………………. 59

ЗАДАЧА……………………………………………………………………………………………………………………………….. 59

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 60

Обсуждение………………………………………………………………………………………………………………………….. 64

2.3. Модульное тестирование посредством MemoryRouter…………………………………………………… 65

ЗАДАЧА……………………………………………………………………………………………………………………………….. 65

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 66

Обсуждение………………………………………………………………………………………………………………………….. 67

2.4. Подтверждение ухода со страницы посредством компонента Prompt………………………….. 68

ЗАДАЧА……………………………………………………………………………………………………………………………….. 68

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 69

Обсуждение………………………………………………………………………………………………………………………….. 75

2.5. Создание переходов посредством библиотеки React Transition Group………………………….. 75

ЗАДАЧА……………………………………………………………………………………………………………………………….. 75

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 76

Обсуждение………………………………………………………………………………………………………………………….. 81

2.6. Создание защищенных маршрутов…………………………………………………………………………………… 81

ЗАДАЧА……………………………………………………………………………………………………………………………….. 81

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 82

Обсуждение………………………………………………………………………………………………………………………….. 86

Глава 3. Управление состоянием……………………………………………………………. 87

3.1. Управление сложным состоянием посредством преобразователей………………………………. 87

ЗАДАЧА……………………………………………………………………………………………………………………………….. 87

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 88

Обсуждение………………………………………………………………………………………………………………………….. 94

3.2. Создание возможности “Отмена”………………………………………………………………………………………. 95

ЗАДАЧА……………………………………………………………………………………………………………………………….. 95

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 95

Обсуждение……………………………………………………………………………………………………………………….. 101

3.3. Создание форм и проверка действительности их данных…………………………………………….. 102

ЗАДАЧА……………………………………………………………………………………………………………………………… 102

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 102

Обсуждение……………………………………………………………………………………………………………………….. 110

3.4. Часы для измерения времени……………………………………………………………………………………………. 110

ЗАДАЧА……………………………………………………………………………………………………………………………… 110

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 110

Обсуждение……………………………………………………………………………………………………………………….. 113

3.5. Мониторинг состояния сетевого подключения……………………………………………………………… 114

ЗАДАЧА……………………………………………………………………………………………………………………………… 114

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 114

Обсуждение……………………………………………………………………………………………………………………….. 116

3.6. Управление глобальным состоянием посредством библиотеки Redux……………………….. 116

ЗАДАЧА……………………………………………………………………………………………………………………………… 116

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 116

Обсуждение……………………………………………………………………………………………………………………….. 122

3.7. Сохранение состояния при обновлении страниц посредством Redux Persist……………… 123

ЗАДАЧА……………………………………………………………………………………………………………………………… 123

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 124

Обсуждение……………………………………………………………………………………………………………………….. 127

3.8. Вычисление производного состояния посредством Reselect………………………………………… 127

ЗАДАЧА……………………………………………………………………………………………………………………………… 127

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 128

Обсуждение……………………………………………………………………………………………………………………….. 131

Глава 4. Проектирование для обеспечения интерактивности……………….. 133

4.1. Создание центрального обработчика ошибок………………………………………………………………. 133

ЗАДАЧА……………………………………………………………………………………………………………………………… 133

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 134

Обсуждение……………………………………………………………………………………………………………………….. 138

4.2. Создаем интерактивное справочное руководство…………………………………………………………. 139

ЗАДАЧА……………………………………………………………………………………………………………………………… 139

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 139

Обсуждение……………………………………………………………………………………………………………………….. 146

4.3. Сложные взаимодействия посредством преобразователей………………………………………….. 146

ЗАДАЧА……………………………………………………………………………………………………………………………… 146

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 147

Обсуждение……………………………………………………………………………………………………………………….. 153

4.4. Взаимодействие с клавиатурой……………………………………………………………………………………….. 153

ЗАДАЧА……………………………………………………………………………………………………………………………… 153

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 153

Обсуждение……………………………………………………………………………………………………………………….. 156

4.5. Создание насыщенного содержимого посредством редактора Markdown…………………. 156

ЗАДАЧА……………………………………………………………………………………………………………………………… 156

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 156

Обсуждение……………………………………………………………………………………………………………………….. 161

4.6. Анимация посредством классов CSS………………………………………………………………………………. 161

ЗАДАЧА……………………………………………………………………………………………………………………………… 161

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 161

Обсуждение……………………………………………………………………………………………………………………….. 163

4.7. Анимация средствами React…………………………………………………………………………………………….. 163

ЗАДАЧА……………………………………………………………………………………………………………………………… 163

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 164

Обсуждение……………………………………………………………………………………………………………………….. 168

4.8. Анимация информационной графики посредством библиотеки TweenOne………………… 168

ЗАДАЧА……………………………………………………………………………………………………………………………… 168

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 169

Обсуждение……………………………………………………………………………………………………………………….. 175

Глава 5. Подключение к службам………………………………………………………… 176

5.1. Преобразование сетевых вызовов в хуки……………………………………………………………………….. 176

ЗАДАЧА……………………………………………………………………………………………………………………………… 176

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 177

Обсуждение……………………………………………………………………………………………………………………….. 182

5.2. Автоматическое обновление посредством счетчиков состояния…………………………………. 183

ЗАДАЧА……………………………………………………………………………………………………………………………… 183

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 184

Обсуждение……………………………………………………………………………………………………………………….. 191

5.3. Отмена сетевых запросов посредством маркеров…………………………………………………………. 192

ЗАДАЧА……………………………………………………………………………………………………………………………… 192

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 192

Обсуждение……………………………………………………………………………………………………………………….. 195

5.4. Сетевые вызовы посредством Redux………………………………………………………………………………. 195

ЗАДАЧА……………………………………………………………………………………………………………………………… 195

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 196

Обсуждение……………………………………………………………………………………………………………………….. 201

5.5. Подключение к GraphQL………………………………………………………………………………………………….. 202

ЗАДАЧА……………………………………………………………………………………………………………………………… 202

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 202

Обсуждение……………………………………………………………………………………………………………………….. 209

5.6. Уменьшение сетевой нагрузки при помощи очищенных запросов………………………………. 210

ЗАДАЧА……………………………………………………………………………………………………………………………… 210

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 211

Обсуждение……………………………………………………………………………………………………………………….. 213

Глава 6. Библиотеки компонентов……………………………………………………….. 214

6.1. Использование библиотеки Material Design совместно с библиотекой Material-UI……. 215

ЗАДАЧА……………………………………………………………………………………………………………………………… 215

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 215

Обсуждение……………………………………………………………………………………………………………………….. 222

6.2. Простой пользовательский интерфейс посредством React Bootstrap………………………….. 223

ЗАДАЧА……………………………………………………………………………………………………………………………… 223

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 223

Обсуждение……………………………………………………………………………………………………………………….. 227

6.3. Просмотр наборов данных посредством окна React Window………………………………………. 227

ЗАДАЧА……………………………………………………………………………………………………………………………… 227

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 227

Обсуждение……………………………………………………………………………………………………………………….. 230

6.4. Создание реагирующих диалоговых окон посредством библиотеки Material-UI………. 230

ЗАДАЧА……………………………………………………………………………………………………………………………… 230

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 230

Обсуждение……………………………………………………………………………………………………………………….. 232

6.5. Создание консоли администратора посредством React Admin…………………………………… 233

ЗАДАЧА……………………………………………………………………………………………………………………………… 233

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 233

Обсуждение……………………………………………………………………………………………………………………….. 240

6.6. Использование Semantic UI вместо дизайнера………………………………………………………………. 240

ЗАДАЧА……………………………………………………………………………………………………………………………… 240

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 241

Обсуждение……………………………………………………………………………………………………………………….. 246

Глава 7. Безопасность………………………………………………………………………….. 247

7.1. Защищаем запросы, а не маршруты……………………………………………………………………………….. 247

ЗАДАЧА……………………………………………………………………………………………………………………………… 247

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 247

Обсуждение……………………………………………………………………………………………………………………….. 255

7.2. Аутентификация посредством физических ключей……………………………………………………….. 256

ЗАДАЧА……………………………………………………………………………………………………………………………… 256

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 256

Обсуждение……………………………………………………………………………………………………………………….. 266

7.3. Работа с протоколом HTTPS……………………………………………………………………………………………. 267

ЗАДАЧА……………………………………………………………………………………………………………………………… 267

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 267

Обсуждение……………………………………………………………………………………………………………………….. 271

7.4. Аутентификация посредством отпечатка пальца………………………………………………………….. 271

ЗАДАЧА……………………………………………………………………………………………………………………………… 271

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 271

Обсуждение……………………………………………………………………………………………………………………….. 276

7.5. Подтверждение действий, предоставляя учетные данные……………………………………………. 277

ЗАДАЧА……………………………………………………………………………………………………………………………… 277

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 277

Обсуждение……………………………………………………………………………………………………………………….. 283

7.6. Однофакторная аутентификация…………………………………………………………………………………….. 284

ЗАДАЧА……………………………………………………………………………………………………………………………… 284

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 284

Обсуждение……………………………………………………………………………………………………………………….. 288

7.7. Проверка приложения на устройстве Android……………………………………………………………….. 289

ЗАДАЧА……………………………………………………………………………………………………………………………… 289

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 290

Обсуждение……………………………………………………………………………………………………………………….. 291

7.8. Проверка безопасности посредством ESlint…………………………………………………………………… 291

ЗАДАЧА……………………………………………………………………………………………………………………………… 291

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 292

Обсуждение……………………………………………………………………………………………………………………….. 295

7.9. Удобные для браузера формы входа в систему…………………………………………………………….. 296

ЗАДАЧА……………………………………………………………………………………………………………………………… 296

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 296

Обсуждение……………………………………………………………………………………………………………………….. 297

Глава 8. Тестирование………………………………………………………………………….. 299

8.1. Работа с библиотекой React Testing Library…………………………………………………………………… 300

ЗАДАЧА……………………………………………………………………………………………………………………………… 300

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 301

Обсуждение……………………………………………………………………………………………………………………….. 307

8.2. Использование Storybook для тестирования отрисовки……………………………………………….. 308

ЗАДАЧА……………………………………………………………………………………………………………………………… 308

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 308

Обсуждение……………………………………………………………………………………………………………………….. 314

8.3. Тестирование без сервера посредством Cypress……………………………………………………………. 315

ЗАДАЧА……………………………………………………………………………………………………………………………… 315

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 315

Обсуждение……………………………………………………………………………………………………………………….. 322

8.4. Использование Cypress для офлайнового тестирования……………………………………………….. 323

ЗАДАЧА……………………………………………………………………………………………………………………………… 323

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 323

Обсуждение……………………………………………………………………………………………………………………….. 326

8.5. Использование Selenium для тестирования в браузере…………………………………………………. 326

ЗАДАЧА……………………………………………………………………………………………………………………………… 326

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 327

Обсуждение……………………………………………………………………………………………………………………….. 333

8.6. Тестирование внешнего вида на разных браузерах посредством ImageMagick………… 334

ЗАДАЧА……………………………………………………………………………………………………………………………… 334

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 334

Обсуждение……………………………………………………………………………………………………………………….. 341

8.7. Добавление консоли в браузер мобильного устройства………………………………………………. 342

ЗАДАЧА……………………………………………………………………………………………………………………………… 342

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 342

Обсуждение……………………………………………………………………………………………………………………….. 345

8.8. Удаление произвольности из тестов……………………………………………………………………………….. 346

ЗАДАЧА……………………………………………………………………………………………………………………………… 346

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 347

Обсуждение……………………………………………………………………………………………………………………….. 349

8.9. Путешествие во времени…………………………………………………………………………………………………… 350

ЗАДАЧА……………………………………………………………………………………………………………………………… 350

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 350

Обсуждение……………………………………………………………………………………………………………………….. 355

Глава 9. Доступность специальных возможностей……………………………….. 356

9.1. Использование ориентиров……………………………………………………………………………………………… 357

ЗАДАЧА……………………………………………………………………………………………………………………………… 357

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 359

Обсуждение……………………………………………………………………………………………………………………….. 362

9.2. Применение ролей…………………………………………………………………………………………………………….. 362

ЗАДАЧА……………………………………………………………………………………………………………………………… 362

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 363

Обсуждение……………………………………………………………………………………………………………………….. 371

9.3. Проверка доступности посредством ESlint…………………………………………………………………….. 372

ЗАДАЧА……………………………………………………………………………………………………………………………… 372

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 372

Обсуждение……………………………………………………………………………………………………………………….. 378

9.4. Динамический анализ посредством axe DevTools…………………………………………………………. 379

ЗАДАЧА……………………………………………………………………………………………………………………………… 379

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 379

Обсуждение……………………………………………………………………………………………………………………….. 383

9.5. Автоматизация тестирования в браузере посредством Cypress Axe……………………………. 384

ЗАДАЧА……………………………………………………………………………………………………………………………… 384

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 384

Обсуждение……………………………………………………………………………………………………………………….. 387

9.6. Добавление в страницу кнопок пропуска содержимого……………………………………………….. 388

ЗАДАЧА……………………………………………………………………………………………………………………………… 388

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 389

Обсуждение……………………………………………………………………………………………………………………….. 394

9.7. Добавление возможности пропуска областей страницы……………………………………………… 395

ЗАДАЧА……………………………………………………………………………………………………………………………… 395

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 396

Обсуждение……………………………………………………………………………………………………………………….. 404

9.8. Захват области действия в модальных окнах………………………………………………………………… 404

ЗАДАЧА……………………………………………………………………………………………………………………………… 404

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 406

Обсуждение……………………………………………………………………………………………………………………….. 407

9.9. Создание считывателя экрана посредством Speech API………………………………………………. 407

ЗАДАЧА……………………………………………………………………………………………………………………………… 407

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 408

Обсуждение……………………………………………………………………………………………………………………….. 412

Глава 10. Производительность……………………………………………………………… 413

10.1. Браузерные средства настройки производительности……………………………………………….. 414

ЗАДАЧА……………………………………………………………………………………………………………………………. 414

РЕШЕНИЕ………………………………………………………………………………………………………………………… 414

Обсуждение……………………………………………………………………………………………………………………… 421

10.2. Слежение за отрисовкой посредством Profiler…………………………………………………………….. 421

ЗАДАЧА……………………………………………………………………………………………………………………………. 421

РЕШЕНИЕ………………………………………………………………………………………………………………………… 422

Обсуждение……………………………………………………………………………………………………………………… 427

10.3. Создание модульных тестов с Profiler………………………………………………………………………….. 427

ЗАДАЧА……………………………………………………………………………………………………………………………. 427

РЕШЕНИЕ………………………………………………………………………………………………………………………… 427

Обсуждение……………………………………………………………………………………………………………………… 431

10.4. Точное измерение времени…………………………………………………………………………………………….. 432

ЗАДАЧА……………………………………………………………………………………………………………………………. 432

РЕШЕНИЕ………………………………………………………………………………………………………………………… 433

Обсуждение……………………………………………………………………………………………………………………… 434

10.5. Уменьшение размера приложений посредством разделения кода…………………………….. 436

ЗАДАЧА……………………………………………………………………………………………………………………………. 436

РЕШЕНИЕ………………………………………………………………………………………………………………………… 437

Обсуждение……………………………………………………………………………………………………………………… 442

10.6. Объединение сетевых обещаний…………………………………………………………………………………… 443

ЗАДАЧА……………………………………………………………………………………………………………………………. 443

РЕШЕНИЕ………………………………………………………………………………………………………………………… 444

Обсуждение……………………………………………………………………………………………………………………… 446

10.7. Отрисовка на стороне сервера………………………………………………………………………………………. 447

ЗАДАЧА……………………………………………………………………………………………………………………………. 447

РЕШЕНИЕ………………………………………………………………………………………………………………………… 447

Обсуждение……………………………………………………………………………………………………………………… 457

10.8. Использование основных показателей веб-производительности………………………………. 458

ЗАДАЧА……………………………………………………………………………………………………………………………. 458

РЕШЕНИЕ………………………………………………………………………………………………………………………… 459

Обсуждение……………………………………………………………………………………………………………………… 461

Глава 11. Прогрессивные веб-приложения…………………………………………… 462

11.1. Создаем сервис-воркеры посредством Workbox………………………………………………………….. 462

ЗАДАЧА……………………………………………………………………………………………………………………………. 462

РЕШЕНИЕ………………………………………………………………………………………………………………………… 465

Обсуждение……………………………………………………………………………………………………………………… 479

11.2. Создание прогрессивных веб-приложений посредством Create React App………………. 480

ЗАДАЧА……………………………………………………………………………………………………………………………. 480

РЕШЕНИЕ………………………………………………………………………………………………………………………… 480

Обсуждение……………………………………………………………………………………………………………………… 483

11.3. Кеширование сторонних ресурсов……………………………………………………………………………….. 483

ЗАДАЧА……………………………………………………………………………………………………………………………. 483

РЕШЕНИЕ………………………………………………………………………………………………………………………… 483

Обсуждение……………………………………………………………………………………………………………………… 487

11.4. Автоматическая перезагрузка воркеров……………………………………………………………………….. 487

ЗАДАЧА……………………………………………………………………………………………………………………………. 487

РЕШЕНИЕ………………………………………………………………………………………………………………………… 489

Обсуждение……………………………………………………………………………………………………………………… 492

11.5. Добавление извещений…………………………………………………………………………………………………… 492

ЗАДАЧА……………………………………………………………………………………………………………………………. 492

РЕШЕНИЕ………………………………………………………………………………………………………………………… 493

Обсуждение……………………………………………………………………………………………………………………… 499

11.6. Модификации в режиме офлайн посредством фоновой синхронизации…………………… 500

ЗАДАЧА……………………………………………………………………………………………………………………………. 500

РЕШЕНИЕ………………………………………………………………………………………………………………………… 500

Обсуждение……………………………………………………………………………………………………………………… 505

11.7. Добавляем специализированный установочный пользовательский интерфейс………. 506

ЗАДАЧА……………………………………………………………………………………………………………………………. 506

РЕШЕНИЕ………………………………………………………………………………………………………………………… 507

Обсуждение……………………………………………………………………………………………………………………… 510

11.8. Предоставление ответов в режиме офлайн…………………………………………………………………… 511

ЗАДАЧА……………………………………………………………………………………………………………………………. 511

РЕШЕНИЕ………………………………………………………………………………………………………………………… 512

Обсуждение……………………………………………………………………………………………………………………… 515

Предметный указатель…………………………………………………………………………. 517

Об авторах……………………………………………………………………………………………. 525

Об обложке…………………………………………………………………………………………… 526