
В книге рассмотрены вопросы безопасности и оптимизации сценариев на языке 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++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.
-
PHP глазами хакера. 5-е издание
625 ₽
531 ₽