Предисловие ко второму изданию 7
Предисловие 9
Об авторе 10
Благодарности 11

Глава 1. Введение
13
1.1. Что такое PHP? 13
1.2. Создание сайта в Apache 14
1.3. Как работает PHP? 16
Глава 2. Основы PHP
19
2.1. PHP-инструкции 19
2.2. Подключение файлов 23
2.3. Печать 27
2.4. Правила кодирования 29
2.4.1. Комментарии 29
2.4.2. Чувствительность 30
2.4.3. Переменные 32
2.4.4. Основные операции 35
2.4.5. Область видимости 37
2.4.6. Константы 38
2.5. Управление выполнением программы 39
2.6. Циклы 48
2.6.1. Цикл for 48
2.6.2. Цикл while 50
2.6.3. Бесконечные циклы 51
2.6.4. Управление циклами 51
2.7. Прерывание работы программы 53
2.8. Функции 54
2.9. Классы 58
2.10. Массивы 60
2.11. Обработка ошибок 62
2.12. Передача данных 64
2.12.1. Переменные окружения 64
2.12.2. Передача параметров 65
2.12.3. Метод GET 69
2.12.4. Метод POST 72
2.12.5. Уязвимость параметров 74
2.12.6. Скрытые параметры 76
2.13. Хранение параметров пользователя 77
2.13.1. Сеансы 79
2.13.2. Cookies 82
2.13.3. Безопасность cookie 87
2.14. Файлы 88
2.14.1. Открытие файла 89
2.14.2. Закрытие файла 90
2.14.3. Чтение данных 91
2.14.4. Дополнительные функции чтения 93
2.14.5. Запись данных 94
2.14.6. Позиционирование в файле 95
2.14.7. Свойства файлов 96
Глава 3. Безопасность 99
3.1. Комплексная защита 100
3.2. Права доступа 101
3.3. Как взламывают сценарии 102
3.4. Основы защиты сценариев 104
3.4.1. Реальный пример ошибки 105
3.4.2. Рекомендации по защите 108
3.4.3. Тюнинг PHP 110
Защищенный режим 110
Запреты 111
3.5. Проверка корректности данных 111
3.6. Регулярные выражения 116
3.6.1. Функции регулярных выражений PHP 117
Функция ereg() 117
Функция eregi() 117
Функция ereg_replace() 117
Функция eregi_replace() 118
Функция split() 118
Функция spliti() 118
3.6.2. Использование регулярных выражений PHP 118
3.6.3. Использование регулярных выражений Perl 123
3.6.4. Функции регулярных выражений Perl 125
Функция preg_match() 126
Функция preg_match_all() 126
Функция preg_split() 127
3.6.5. Проверка e-mail 127
3.6.6. Советы по использованию регулярных выражений 128
3.7. Что и как фильтровать 128
3.8. Базы данных 131
3.8.1. Основы баз данных 132
3.8.2. Атака SQL Injection 133
3.8.3. Реальное экранирование 142
3.8.4. Параметризированные запросы 143
3.8.5. Работа с файлами 148
3.8.6. Практика работы с базами данных 148
3.8.7. Проверка URL 149
3.9. Работа с файлами 150
3.10. Криптография 151
3.10.1. Симметричное шифрование 152
3.10.2. Асимметричное шифрование 153
3.10.3. Необратимое шифрование 154
3.10.4. Практика использования шифрования 154
3.11. Атака Cross-Site Scripting 161
3.12. Флуд 162
3.12.1. Защита от флуда сообщениями 162
3.12.2. Защита от накрутки голосований 163
3.13. Защита от изменения формы 165
3.14. Сопровождение журнала 167
3.15. Защита от неправомерных изменений 169
3.16. Панель администратора 170
3.17. Опасная переменная $REQUEST_URI 171
3.18. CAPTCHA 172
Глава 4. Оптимизация
179
4.1. Алгоритм 179
4.2. Слабые места 181
4.3. Базы данных 182
4.3.1. Оптимизация запросов 182
4.3.2. Оптимизация СУБД 187
4.3.3. Выборка необходимых данных 189
4.3.4. Изучайте систему 190
4.4. Оптимизация PHP 193
4.4.1. Кэширование вывода 193
4.4.2. Кэширование страниц 194
4.5. Оптимизация или безопасность? 196
Глава 5. Примеры работы с PHP
199
5.1. Загрузка файлов на сервер 199
5.2. Проверка корректности файла 204
5.3. Запретная зона 207
5.3.1. Аутентификация 207
5.3.2. Защита сценариев правами доступа сервера Apache 214
5.4. Работа с сетью 215
5.4.1. Работа с DNS 216
5.4.2. Протоколы 216
5.4.3. Сокеты 217
Инициализация 218
Серверные функции 218
Клиентские функции 219
Обмен данными 220
Управление сокетами 221
5.5. Сканер портов 222
5.6. FTP-клиент низкого уровня 225
5.7. Работа с электронной почтой 228
5.7.1. Протокол SMTP 228
5.7.2. Функция mail() 230
5.7.3. Соединение с SMTP-сервером 232
5.7.4. Безопасность электронной почтовой службы 233
5.7.5. Производительность отправки почты 233
5.8. Защита ссылок 235
5.9. PHP в руках хакера 236
5.10. Уловки 238
5.10.1. Переадресация 238
5.10.2. Всплывающие окна 240
5.10.3. Тег iframe 241
5.10.4. Стой, не уходи! 242
5.11. Универсальная защита 243

Заключение 245
Приложение. Описание электронного архива 247
Литература 249