Головоломки на PHP для хакера - Книга представляет собой задачник по Web-технологиям с уклоном в защиту Web-приложений от злоумышленников. Цель книги - помочь Web-разработчику научиться самостоятельно обнаруживать и устранять уязвимости в своем коде. Главы второго издания существенно обновлены, кроме этого написаны две новые главы, посвященные динамическому формированию изображений и объектно-ориентированному программированию. На компакт-диске, поставляемом вместе с книгой, приведены скрипты, являющиеся ответами на предлагаемые задачи.
Название: Головоломки на PHP для хакера Автор: Кузнецов М., Симдянов И. Издательство: БХВ-Петербург Год: 2008 Страниц: 544 Формат: PDF Размер: 20,8 МБ ISBN: 978-5-9775-0204-7 Качество: Отличное Язык: Русский
Содержание:
Введение Благодарности Часть I. Задачи Глава I.1. Строки и числа I.1.1. Количество и имена файлов в произвольном каталоге I.1.2. Вывод случайного количества символов I.1.3. Выравнивание по правому краю I.1.4. Выравнивание по левому и правому краям I.1.5. Вывод данных в три столбца I.1.6. Передача массива между двумя страницами I.1.7. Передача массива методом GET I.1.8. Передача массива методом POST I.1.9. Передача массива через сессии I.1.10. Передача массива через cookie I.1.11. Вертикальный вывод строки I.1.12. Число в денежном формате I.1.13. Упаковка IP-адреса I.1.14. Календарь I.1.15. Замена символов bbCode I.1.16. Преобразование десятичного числа в двоичное и обратно I.1.17. Возведение числа в степень I.1.18. Изменение регистра строки I.1.19. Преобразование арабского числа в римское Глава I.2. Регулярные выражения I.2.1. Удаление всех тегов из HTML-страницы I.2.2. Удаление изображений из HTML-страницы I.2.3. Преобразование нескольких пробельных символов в один I.2.4. Извлечение названия HTML-страницы I.2.5. Конвертация даты из MySQL-формата в календарный формат I.2.6. Проверка корректности ввода адреса электронной почты I.2.7. Проверка корректности ввода URL I.2.8. Подсветка URL I.2.9. Проверка корректности ввода чисел I.2.10. Изменение регистра I.2.11. Разбивка длинной строки I.2.12. Разбивка HTML-страницы на предложения I.2.13. Количество слов в тексте I.2.14. Интерпретация тегов bbCode I.2.15. Подсветка PHP-кода I.2.16. Замена подстроки с условием Глава I.3. Файлы I.3.1. Загрузка файлов на сервер I.3.2. Загрузка файла на сервер по частям I.3.3. Создание файла с уникальным именем I.3.4. Редактирование файлов на удаленном сервере I.3.5. Уязвимость скрипта загрузки I.3.6. Счетчик загрузок I.3.7. Сохранение текстовых и графических файлов I.3.8. Определение размера файла I.3.9. Определение количества строк в файле I.3.10. Изменение порядка следования строк в файле I.3.11. Случайный вывод из файла I.3.12. Редактирование файла I.3.13. Сортировка содержимого текстового файла I.3.14. Добавление записи в файл I.3.15. Постраничная навигация для файла I.3.16. Самая длинная и самая короткая строка в файле I.3.17. Вывод из файла списка строк заданной длины I.3.18. Вывод слов из файла по первым символам I.3.19. Список файлов и подкаталогов в каталоге I.3.20. Количество файлов в каталогах I.3.21. Количество строк в файлах проекта I.3.22. Замена строки во всех файлах вложенных подкаталогов I.3.23. Копирование содержимого одного каталога в другой I.3.24. Удаление каталога I.3.25. Подсчет объема памяти, занимаемой каталогом I.3.26. Система регистрации I.3.27. Случайное изображение из каталога I.3.28. Определение даты создания изображения I.3.29. Взлом гостевой книги Глава I.4. MySQL I.4.1. Система регистрации I.4.2. SQL-инъекция по числовому параметру I.4.3. Определение версии сервера MySQL I.4.4. Поиск пользователя - SQL-инъекция I.4.5. Удаление пользователей при помощи SQL-инъекции I.4.6. Постраничная навигация I.4.7. Алфавитная навигация I.4.8. Сортировка I.4.9. Двойной выпадающий список I.4.10. Удаление сразу нескольких позиций I.4.11. Хранение MP3-файлов в базе данных I.4.12. Хранение изображений в базе данных I.4.13. Загрузка данных из дампа базы данных I.4.14. Шифрование содержимого базы данных Глава I.5. Протокол HTTP I.5.1. Загрузка страницы I.5.2. Получение HTTP-заголовков с сервера I.5.3. Определение размера файла на удаленном хосте I.5.4. Отправка данных методом POST I.5.5. Получение точного времени Глава I.6. Сессии и cookie I.6.1. Пользователи Online I.6.2. Собственный механизм сессии I.6.3. Защита HTML-формы при помощи сессии I.6.4. Определение, включены ли cookie у посетителя I.6.5. Фальсификация cookie I.6.6. Обход защищенной сессией HTML-формы I.6.7. Межсайтовый скриптинг I.6.8. Похищение cookie Глава I.7. Пользовательские агенты и рефереры I.7.1. Переходы с других сайтов I.7.2. Защита HTML-формы при помощи реферера I.7.3. Фальсификация реферера I.7.4. Ключевые слова поисковых систем I.7.5. Распознавание посещений сайта роботами поисковых систем I.7.6. Защита от менеджеров загрузки I.7.7. Фальсификация пользовательского агента Глава I.8. Авторизация и аутентификация I.8.1. Авторизация на файлах I.8.2. Шифрование пароля I.8.3. Подбор пароля перебором I.8.4. Подбор пароля по словарю I.8.5. Генератор паролей I.8.6. Защита текстовых файлов от просмотра в браузере I.8.7. Авторизация при помощи cookie I.8.8. Защита имени пользователя от подделки I.8.9. Авторизация при помощи сессий I.8.10. Шифрование пароля в базе данных I.8.11. Базовая HTTP-авторизация Глава I.9. Использование информации со сторонних сайтов I.9.1. Загрузка страницы с удаленного хоста I.9.2. Извлечение ссылок с Yandex I.9.3. Извлечение ссылок с Google I.9.4. Извлечение ссылок с Rambler I.9.5. Извлечение ссылок с Aport I.9.6. Определение курса валют из XML-файла I.9.7. Определение динамики курса валют I.9.8. Загрузка новостей со стороннего сайта I.9.9. Создание новостного RSS-канала Глава I.10. FTP-протокол I.10.1. Определение типа операционной системы I.10.2. Список файлов на FTP-сервере I.10.3. Загрузка файлов I.10.4. Изменение прав доступа I.10.5. Какой объем памяти занимает сайт? I.10.6. Поиск файлов, чей размер превышает 100 Кбайт I.10.7. Перенос сайта с одного хоста на другой Глава I.11. Электронная почта I.11.1. Отправка почтового сообщения с сайта I.11.2. Отправка письма с вложением I.11.3. Массовая рассылка писем I.11.4. Предотвращение массовой рассылки I.11.5. Отправка почтового сообщения через SMTP-ретранслятор I.11.6. Выяснение адресов почтовых ретрансляторов I.11.7. Подсчет количества писем в почтовом ящике I.11.8. Чтение заголовков писем I.11.9. Удаление писем из почтового ящика Глава I.12. Whois-сервис I.12.1. Определение принадлежности IP-адресов I.12.2. Определение принадлежности европейских IP-адресов I.12.3. Следование реферальному серверу I.12.4. Определение IP-адреса по сетевому адресу I.12.5. Определение сетевого адреса по IP-адресу I.12.6. Выяснение, занят ли домен Глава I.13. Объектно-ориентированное программирование I.13.1. Определение класса объекта I.13.2. Счетчик объектов I.13.3. Транзакции I.13.4. Получение копии объекта I.13.5. Хранение объекта в СУБД MySQL I.13.6. Постраничная навигация I.13.7. Создание исключений I.13.8. Определение версии PHP и расширений I.13.9. Распознавание загруженных расширений и их версий Глава I.14. Шпионские скрипты I.14.1. Слежение за ссылкой на удаленной странице I.14.2. Проверка ссылочной целостности I.14.3. Новые файлы на виртуальном хосте I.14.4. Слишком большие файлы на виртуальном хосте Глава I.15. Динамические изображения (GDLib) I.15.1. Счетчик посещений I.15.2. Несколько изображений на странице I.15.3. Определение размера изображения I.15.4. Защитное изображение для HTML-формы I.15.5. Создание уменьшенной копии I.15.6. Водяные знаки I.15.7. Кривая Безье I.15.8. Построение гистограммы I.15.9. Построение круговой диаграммы Глава I.16. Разное I.16.1. Обмен значений переменных I.16.2. Скрипт предзагрузки страницы I.16.3. Использование утилиты ping I.16.4. Работа с номером узла I.16.5. Права доступа I.16.6. Эмуляция утилиты tar I.16.7. Буферизация данных I.16.8. Размер страницы I.16.9. Разгрузка баржи I.16.10. Продолжительность жизни ученого I.16.11. Выгода предпринимателя Часть II. Решения Глава II.1. Строки и числа II.1.1. Количество и имена файлов в произвольном каталоге II.1.2. Вывод случайного количества символов II.1.3. Выравнивание по правому краю II.1.4. Выравнивание по левому и правому краям II.1.5. Вывод данных в три столбца II.1.6. Передача массива между двумя страницами II.1.7. Передача массива методом GET II.1.8. Передача массива методом POST II.1.9. Передача массива через сессии II.1.10. Передача массива через cookie II.1.11. Вертикальный вывод строки II.1.12. Число в денежном формате II.1.13. Упаковка IP-адреса II.1.14. Календарь II.1.15. Замена символов bbCode II.1.16. Преобразование десятичного числа в двоичное и обратно II.1.17. Возведение числа в степень II.1.18. Изменение регистра строки II.1.19. Преобразование арабского числа в римское Глава II.2. Регулярные выражения II.2.1. Удаление всех тегов из HTML-страницы II.2.2. Удаление изображений из HTML-страницы II.2.3. Преобразование нескольких пробельных символов в один II.2.4. Извлечение названия HTML-страницы II.2.5. Конвертация даты из MySQL-формата в календарный II.2.6. Проверка корректности ввода адреса электронной почты II.2.7. Проверка корректности ввода URL II.2.8. Подсветка URL II.2.9. Проверка корректности ввода чисел II.2.10. Изменение регистра II.2.11. Разбивка длинной строки II.2.12. Разбивка текста на предложения II.2.13. Количество слов в тексте II.2.14. Интерпретация тегов bbCode II.2.15. Подсветка PHP-кода II.2.16. Замена подстроки с условием Глава II.3. Файлы II.3.1. Загрузка файлов на сервер II.3.2. Загрузка файла на сервер по частям II.3.3. Создание файла с уникальным именем II.3.4. Редактирование файлов на удаленном сервере II.3.5. Уязвимость скрипта загрузки II.3.6. Счетчик загрузок II.3.7. Сохранение текстовых и графических файлов II.3.8. Определение размера файла II.3.9. Определение количества строк в файле II.3.10. Изменение порядка следования строк в файле II.3.11. Случайный вывод из файла II.3.12. Редактирование файла II.3.13. Сортировка содержимого текстового файла II.3.14. Добавление записи в файл II.3.15. Постраничная навигация II.3.16. Самая длинная и самая короткая строка в файле II.3.17. Вывод из файла списка строк заданной длины II.3.18. Вывод слов из файла по первым символам II.3.19. Список файлов и подкаталогов в каталоге II.3.20. Количество файлов в каталогах II.3.21. Количество строк в файлах проекта II.3.22. Замена строки во всех файлах вложенных подкаталогов II.3.23. Копирование содержимого одного каталога в другой II.3.24. Удаление каталога II.3.25. Подсчет объема памяти, занимаемой каталогом II.3.26. Система регистрации II.3.27. Случайное изображение из каталога II.3.28. Определение даты создания изображения II.3.29. Взлом гостевой книги Глава II.4. MySQL и SQL-инъекции II.4.1. Система регистрации II.4.2. SQL-инъекция по числовому параметру II.4.3. Определение версии сервера MySQL II.4.4. Поиск пользователя - SQL-инъекция II.4.5. Удаление пользователей при помощи SQL-инъекции II.4.6. Постраничная навигация II.4.7. Алфавитная навигация II.4.8. Сортировка II.4.9. Двойной выпадающий список II.4.10. Удаление сразу нескольких позиций II.4.11. Хранение MP3-файлов в базе данных II.4.12. Хранение изображений в базе данных II.4.13. Загрузка данных из дампа базы данных II.4.14. Шифрование содержимого базы данных Глава II.5. Протокол HTTP II.5.1. Загрузка страницы II.5.2. Получение HTTP-заголовков с сервера II.5.3. Определение размера файла на удаленном хосте II.5.4. Отправка данных методом POST II.5.5. Получение точного времени Глава II.6. Сессии и cookie II.6.1. Пользователи Online II.6.2. Собственный механизм сессии II.6.3. Защита HTML-формы при помощи сессии II.6.4. Определение, включены ли cookie у посетителя II.6.5. Фальсификация cookie II.6.6. Обход защищенной сессией HTML-формы II.6.7. Межсайтовый скриптинг II.6.8. Похищение cookie Глава II.7. Пользовательские агенты и рефереры II.7.1. Переходы с других сайтов II.7.2. Защита HTML-формы при помощи реферера II.7.3. Фальсификация реферера II.7.4. Ключевые слова поисковых систем II.7.5. Распознавание посещений сайта роботами поисковых систем II.7.6. Защита от менеджеров загрузки II.7.7. Фальсификация пользовательского агента Глава II.8. Авторизация и аутентификация II.8.1. Авторизация на файлах II.8.2. Шифрование пароля II.8.3. Подбор пароля перебором II.8.4. Подбор пароля по словарю II.8.5. Генератор паролей II.8.6. Защита текстовых файлов от просмотра в браузере II.8.7. Авторизация при помощи cookie II.8.8. Защита имени пользователя от подделки II.8.9. Авторизация при помощи сессий II.8.10. Шифрование пароля в базе данных II.8.11. Базовая HTTP-авторизация Глава II.9. Использование информации со сторонних сайтов II.9.1. Загрузка страницы с удаленного хоста II.9.2. Извлечение ссылок с Yandex II.9.3. Извлечение ссылок с Google II.9.4. Извлечение ссылок с Rambler II.9.5. Извлечение ссылок с Aport II.9.6. Определение курса валют из XML-файла II.9.7. Определение динамики курса валют II.9.8. Загрузка новостей со стороннего сайта II.9.9. Создание новостного RSS-канала Глава II.10. FTP-протокол II.10.1. Определение типа операционной системы II.10.2. Список файлов на FTP-сервере II.10.3. Загрузка файлов II.10.4. Изменение прав доступа II.10.5. Какой объем памяти занимает сайт? II.10.6. Поиск файлов, чей размер превышает 100 Кбайт II.10.7. Перенос сайта с одного хоста на другой Глава II.11. Электронная почта II.11.1. Отправка почтового сообщения с сайта II.11.2. Отправка письма с вложением II.11.3. Массовая рассылка писем II.11.4. Предотвращение массовой рассылки II.11.5. Отправка почтового сообщения через SMTP-ретранслятор II.11.6. Выяснение адресов почтовых ретрансляторов II.11.7. Подсчет количества писем в почтовом ящике II.11.8. Чтение заголовков писем II.11.9. Удаление писем из почтового ящика Глава II.12. Whois-сервис II.12.1. Определение принадлежности IP-адресов II.12.2. Определение принадлежности европейских IP-адресов II.12.3. Следование реферальному серверу II.12.4. Определение IP-адреса по сетевому адресу II.12.5. Определение сетевого адреса по IP-адресу II.12.6. Выяснение, занят ли домен Глава II.13. Объектно-ориентированное программирование II.13.1. Определение класса объекта II.13.2. Счетчик объектов II.13.3. Транзакции II.13.4. Получение копии объекта II.13.5. Хранение объекта в СУБД MySQL II.13.6. Постраничная навигация II.13.7. Создание исключений II.13.8. Определение версии PHP и расширений II.13.9. Распознавание загруженных расширений и их версии Глава II.14. Шпионские скрипты II.14.1. Слежение за ссылкой на удаленной странице II.14.2. Проверка ссылочной целостности II.14.3. Новые файлы на виртуальном хосте II.14.4. Слишком большие файлы на виртуальном хосте Глава II.15. Динамические изображения (GDLib) II.15.1. Счетчик посещений II.15.2. Несколько изображений на странице II.15.3. Определение размера изображения II.15.4. Защитное изображение для HTML-формы II.15.5. Создание уменьшенной копии II.15.6. Водяные знаки II.15.7. Кривая Безье II.15.8. Построение гистограммы II.15.9. Построение круговой диаграммы Глава II.16. Разное II.16.1. Обмен значений переменных II.16.2. Скрипт предзагрузки страницы II.16.3. Использование утилиты ping II.16.4. Работа с номером узла II.16.5. Права доступа II.16.6. Эмуляция утилиты tar II.16.7. Буферизация данных II.16.8. Размер динамической страницы II.16.9. Разгрузка баржи II.16.10. Продолжительность жизни ученого II.16.11. Выгода предпринимателя Заключение Приложения Приложение 1. Регулярные выражения П1.1. Синтаксис регулярных выражений П1.2. Функции для работы с регулярными выражениями П1.2.1. Функция preg_grep() П1.2.2. Функция preg_match() П1.2.3. Функция preg_match_all() П1.2.4. Функция preg_quote() П1.2.5. Функция preg_replace() П1.2.6. Функция preg_replace_callback() П1.2.7. Функция preg_split() Приложение 2. Описание компакт-диска Предметный указатель