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

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

Добавить комментарий