Оглавление Введение 1 
 Благодарности 2 
 Часть I. ЗАДАЧИ 3 
 Глава I.1. Строки 5 
 I.1.1. Количество и имена файлов в произвольном каталоге 5 
 I.1.2. Выравнивание по правому краю 5 
 I.1.3. Выравнивание по левому и правому краям 7 
 I.1.4. Вывод данных в три столбца 7 
 I.1.5. Передача массива между двумя страницами 8 
 I.1.6. Передача массива методом GET 8 
 I.1.7. Передача массива методом POST 8 
 I.1.8. Передача массива через сессии 8 
 I.1.9. Передача массива через cookies 8 
 I.1.10. Календарь 9 
 I.1.11. Вертикальный вывод строки 9 
 I.1.12. Число в денежном формате 10 
 I.1.13. Замена символов bbCode 10 
 Глава I.2. Регулярные выражения 11 
 I.2.1. Удаление всех тегов из HTML-страницы 11 
 I.2.2. Удаление изображений из HTML-страницы 12 
 I.2.3. Извлечение названия HTML-страницы 12 
 I.2.4. Конвертация даты из MySQL-формата в календарный формат 12 
 I.2.5. Проверка корректности ввода адреса электронной почты 12 
 I.2.6. Проверка корректности ввода URL 13 
 I.2.7. Подсветка URL 13 
 I.2.8. Проверка корректности ввода чисел 13 
 I.2.9. Изменение регистра 13 
 I.2.10. Разбивка длинной строки 14 
 I.2.11. Разбивка HTML-страницы на предложения 14 
 I.2.12. Количество слов в тексте 14 
 I.2.13. Интерпретация тегов bbCode 14 
 I.2.14. Подсветка PHP-кода 15 
 Глава I.3. Файлы 16 
 I.3.1. Загрузка файлов на сервер 16 
 I.3.2. Редактирование файлов на удаленном сервере 17 
 I.3.3. Уязвимость скрипта загрузки 17 
 I.3.4. Счетчик загрузок 18 
 I.3.5. Сохранение текстовых и графических файлов 19 
 I.3.6. Определение размера файла 19 
 I.3.7. Определение количества строк в файле 19 
 I.3.8. Изменение порядка следования строк в файле 20 
 I.3.9. Список файлов и подкаталогов в каталоге 20 
 I.3.10. Количество файлов в каталогах 20 
 I.3.11. Количество строк в файлах проекта 21 
 I.3.12. Замена строки во всех файлах вложенных подкаталогов 21 
 I.3.13. Загрузка файла на сервер по частям 21 
 I.3.14. Удаление каталога 21 
 I.3.15. Случайный вывод из файла 22 
 I.3.16. Редактирование файла 22 
 I.3.17. Сортировка содержимого текстового файла 22 
 I.3.18. Добавление записи в файл 23 
 I.3.19. Постраничная навигация 23 
 I.3.20. Система регистрации 23 
 I.3.21. Случайный вывод из файла 24 
 I.3.22. Определение даты создания изображения 24 
 I.3.23. Копирование содержимого одного каталога в другой 24 
 I.3.24. Взлом гостевой книги 24 
 Глава I.4. MySQL 26 
 I.4.1. Система регистрации 26 
 I.4.2. SQL-инъекция по числовому параметру 28 
 I.4.3. Определение версии сервера MySQL 29 
 I.4.4. Поиск пользователя — SQL-инъекция 29 
 I.4.5. Удаление пользователей при помощи SQL-инъекции 31 
 I.4.6. Постраничная навигация 33 
 I.4.7. Алфавитная навигация 35 
 I.4.8. Сортировка 36 
 I.4.9. Двойной выпадающий список 37 
 I.4.10. Удаление сразу нескольких позиций 37 
 I.4.11. Хранение MP3-файлов в базе данных 38 
 I.4.12. Хранение изображений в базе данных 39 
 I.4.13. Загрузка данных из дампа базы данных 40 
 Глава I.5. Сессии и cookies 41 
 I.5.1. Пользователи OnLine 41 
 I.5.2. Собственный механизм сессии 42 
 I.5.3. Защита HTML-формы при помощи сессии 42 
 I.5.4. Определение, включены ли cookie у посетителя 43 
 I.5.5. Подделка cookie 43 
 I.5.6. Обход защищенной сессией HTML-формы 44 
 I.5.7. Межсайтовый скриптинг 45 
 I.5.8. Похищение cookie 47 
 Глава I.6. Пользовательские агенты и рефереры 48 
 I.6.1. Переходы с других сайтов 48 
 I.6.2. Защита HTML-формы при помощи реферера 49 
 I.6.3. Фальсификация реферера 50 
 I.6.4. Ключевые слова поисковых систем 50 
 I.6.5. Распознавание посещений сайта роботами поисковых систем 50 
 I.6.6. Защита от менеджеров загрузки 50 
 I.6.7. Фальсификация пользовательского агента 51 
 Глава I.7. Авторизация и аутентификация 52 
 I.7.1. Авторизация на файлах 53 
 I.7.2. Шифрование пароля 54 
 I.7.3. Подбор пароля 55 
 I.7.4. Подбор пароля по словарю 55 
 I.7.5. Генератор паролей 56 
 I.7.6. Защита текстовых файлов от просмотра в браузере 56 
 I.7.7. Авторизация при помощи cookie 57 
 I.7.8. Защита имени пользователя от подделки 59 
 I.7.9. Авторизация при помощи сессий 60 
 I.7.10. Шифрование пароля в базе данных 62 
 I.7.11. Базовая HTTP-авторизация 62 
 Глава I.8. Использование информации со сторонних сайтов 63 
 I.8.1. Загрузка страницы с удаленного хоста 64 
 I.8.2. Извлечение ссылок с Yandex 64 
 I.8.3. Извлечение ссылок с Google 65 
 I.8.4. Извлечение ссылок с Rambler 66 
 I.8.5. Извлечение ссылок с Aport 67 
 I.8.6. Определение курса валют из XML-файла 68 
 I.8.7. Определение динамики курса валют 69 
 Глава I.9. FTP-протокол 72 
 I.9.1. Определение типа операционной системы 72 
 I.9.2. Список файлов на FTP-сервере 72 
 I.9.3. Загрузка файлов 73 
 I.9.4. Изменение прав доступа 73 
 Глава I.10. Протокол HTTP 74 
 I.10.1. Загрузка страницы 74 
 I.10.2. Получение HTTP-заголовков с сервера 75 
 I.10.3. Определение размера файла на удаленном хосте 75 
 I.10.4. Отправка данных методом POST 75 
 Глава I.11. Электронная почта 77 
 I.11.1. Отправка почтового сообщения с сайта 77 
 I.11.2. Отправка письма с вложением 77 
 I.11.3. Массовая рассылка писем 77 
 I.11.4. Предотвращение массовой рассылки 78 
 I.11.5. Отправка почтового сообщения через SMTP-ретранслятор 78 
 I.11.6. Выяснение адресов почтовых ретрансляторов 78 
 Глава I.12. Whois-сервис 79 
 I.12.1. Определение принадлежности IP-адресов 79 
 I.12.2. Определение принадлежности европейских IP-адресов 79 
 I.12.3. Следование реферальному серверу 80 
 I.12.4. Определение IP-адреса по сетевому адресу 81 
 I.12.5. Определение сетевого адреса по IP-адресу 81 
 I.12.6. Выяснение, занят ли домен 81 
 Глава I.13. Операционная система UNIX 82 
 I.13.1. Использование утилиты ping 82 
 I.13.2. Работа с номером узла 82 
 I.13.3. Права доступа 83 
 I.13.4. Работа с архивами 83 
 Глава I.14. Шпионские скрипты 84 
 I.14.1. Слежение за ссылкой на удаленной странице 84 
 I.14.2. Проверка ссылочной целостности 84 
 I.14.3. Новые файлы на виртуальном хосте 85 
 I.14.4. Слишком большие файлы на виртуальном хосте 85 
 Глава I.15. Разное 86 
 I.15.1. Обмен значений переменных 86 
 I.15.2. Скрипт предзагрузки страницы 86 
 I.15.3. Эмуляция утилиты tar 87 
 I.15.4. Буферизация данных 87 
 Часть II. РЕШЕНИЯ 89 
 Глава II.1. Строки 91 
 II.1.1. Количество и имена файлов в произвольном каталоге 91 
 II.1.2. Выравнивание по правому краю 95 
 II.1.3. Выравнивание по левому и правому краям 96 
 II.1.4. Вывод данных в три столбца 97 
 II.1.5. Передача массива между двумя страницами 99 
 II.1.6. Передача массива методом GET 100 
 II.1.7. Передача массива методом POST 102 
 II.1.8. Передача массива через сессии 103 
 II.1.9. Передача массива через cookies 104 
 II.1.10. Календарь 106 
 II.1.11. Вертикальный вывод строки 109 
 II.1.12. Число в денежном формате 110 
 II.1.13. Замена символов bbCode 110 
 Глава II.2. Регулярные выражения 113 
 II.2.1. Удаление всех тегов из HTML-страницы 113 
 II.2.2. Удаление изображений из HTML-страницы 115 
 II.2.3. Извлечение названия HTML-страницы 116 
 II.2.4. Конвертация даты из MySQL-формата в календарный 117 
 II.2.5. Проверка корректности ввода адреса электронной почты 118 
 II.2.6. Проверка корректности ввода URL 120 
 II.2.7. Подсветка URL 121 
 II.2.8. Проверка корректности ввода чисел 121 
 II.2.9. Изменение регистра 122 
 II.2.10. Разбивка длинной строки 124 
 II.2.11. Разбивка текста на предложения 124 
 II.2.12. Количество слов в тексте 128 
 II.2.13. Интерпретация тегов bbCode 131 
 II.2.14. Подсветка PHP-кода 132 
 Глава II.3. Файлы 136 
 II.3.1. Загрузка файлов на сервер 136 
 II.3.2. Редактирование файлов на удаленном сервере 138 
 II.3.3. Уязвимость скрипта загрузки 140 
 II.3.4. Счетчик загрузок 144 
 II.3.5. Сохранение текстовых и графических файлов 147 
 II.3.6. Определение размера файла 148 
 II.3.7. Определение количества строк в файле 150 
 II.3.8. Изменение порядка следования строк в файле 150 
 II.3.9. Список файлов и подкаталогов в каталоге 151 
 II.3.10. Количество файлов в каталогах 152 
 II.3.11. Количество строк в файлах проекта 154 
 II.3.12. Замена строки во всех файлах вложенных подкаталогов 156 
 II.3.13. Загрузка файла на сервер по частям 157 
 II.3.14. Удаление каталога 159 
 II.3.15. Случайный вывод из файла 160 
 II.3.16. Редактирование файла 161 
 II.3.17. Сортировка содержимого текстового файла 162 
 II.3.18. Добавление записи в файл 167 
 II.3.19. Постраничная навигация 168 
 II.3.20. Система регистрации 170 
 II.3.21. Случайный вывод из файла 175 
 II.3.22. Определение даты создания изображения 175 
 II.3.23. Копирование содержимого одного каталога в другой 176 
 II.3.24. Взлом гостевой книги 177 
 Глава II.4. MySQL и SQL-инъекции 180 
 II.4.1. Система регистрации 180 
 II.4.2. SQL-инъекция по числовому параметру 183 
 II.4.3. Определение версии сервера MySQL 188 
 II.4.4. Поиск пользователя — SQL-инъекция 189 
 II.4.5. Удаление пользователей при помощи SQL-инъекции 195 
 II.4.6. Постраничная навигация 197 
 II.4.7. Алфавитная навигация 200 
 II.4.8. Сортировка 203 
 II.4.9. Двойной выпадающий список 205 
 II.4.10. Удаление сразу нескольких позиций 211 
 II.4.11. Хранение MP3-файлов в базе данных 213 
 II.4.12. Хранение изображений в базе данных 216 
 II.4.13. Загрузка данных из дампа базы данных 221 
 Глава II.5. Сессии и cookies 222 
 II.5.1. Пользователи OnLine 222 
 II.5.2. Собственный механизм сессии 225 
 II.5.3. Защита HTML-формы при помощи сессии 230 
 II.5.4. Определение, включены ли cookie у посетителя 232 
 II.5.5. Подделка cookie 233 
 II.5.6. Обход защищенной сессией HTML-формы 235 
 II.5.7. Межсайтовый скриптинг 238 
 II.5.8. Похищение cookie 240 
 Главa II.6. Пользовательские агенты и рефереры 241 
 II.6.1. Переходы с других сайтов 241 
 II.6.2. Защита HTML-формы при помощи реферера 243 
 II.6.3. Фальсификация реферера 244 
 II.6.4. Ключевые слова поисковых систем 246 
 II.6.5. Распознавание посещений сайта роботами поисковых систем 247 
 II.6.6. Защита от менеджеров загрузки 249 
 II.6.7. Фальсификация пользовательского агента 249 
 Глава II.7. Авторизация и аутентификация 251 
 II.7.1. Авторизация на файлах 251 
 II.7.2. Шифрование пароля 256 
 II.7.3. Подбор пароля 260 
 II.7.4. Подбор пароля по словарю 267 
 II.7.5. Генератор паролей 269 
 II.7.6. Защита текстовых файлов от просмотра в браузере 270 
 II.7.7. Авторизация при помощи cookie 271 
 II.7.8. Защита имени пользователя от подделки 278 
 II.7.9. Авторизация при помощи сессий 279 
 II.7.10. Шифрование пароля в базе данных 282 
 II.7.11. Базовая HTTP-авторизация 283 
 Глава II.8. Использование информации со сторонних сайтов 286 
 II.8.1. Загрузка страницы с удаленного хоста 286 
 II.8.2. Извлечение ссылок с Yandex 287 
 II.8.3. Извлечение ссылок с Google 289 
 II.8.4. Извлечение ссылок с Rambler 295 
 II.8.5. Извлечение ссылок с Aport 297 
 II.8.6. Определение курса валют из XML-файла 298 
 II.8.7. Определение динамики курса валют 301 
 Глава II.9. FTP-протокол 305 
 II.9.1. Определение типа операционной системы 305 
 II.9.2. Список файлов на FTP-сервере 307 
 II.9.3. Загрузка файлов 310 
 II.9.4. Изменение прав доступа 312 
 Главa II.10. Протокол HTTP 314 
 II.10.1. Загрузка страницы 314 
 II.10.2. Получение HTTP-заголовков с сервера 318 
 II.10.3. Определение размера файла на удаленном хосте 320 
 II.10.4. Отправка данных методом POST 321 
 Главa II.11. Электронная почта 324 
 II.11.1. Отправка почтового сообщения с сайта 324 
 II.11.2. Отправка письма с вложением 326 
 II.11.3. Массовая рассылка писем 329 
 II.11.4. Предотвращение массовой рассылки 331 
 II.11.5. Отправка почтового сообщения через SMTP-ретранслятор 333 
 II.11.6. Выяснение адресов почтовых ретрансляторов 334 
 Главa II.12. Whois-сервис 336 
 II.12.1. Определение принадлежности IP-адресов 336 
 II.12.2. Определение принадлежности европейских IP-адресов 337 
 II.12.3. Следование реферальному серверу 338 
 II.12.4. Определение IP-адреса по сетевому адресу 341 
 II.12.5. Определение сетевого адреса по IP-адресу 342 
 II.12.6. Выяснение, занят ли домен 342 
 Глава II.13. Операционная система UNIX 350 
 II.13.1. Использование утилиты ping 350 
 II.13.2. Работа с номером узла 352 
 II.13.3. Права доступа 353 
 II.13.4. Работа с архивами 357 
 Главa II.14. Шпионские скрипты 359 
 II.14.1. Слежение за ссылкой на удаленной странице 359 
 II.14.2. Проверка ссылочной целостности 366 
 II.14.3. Новые файлы на виртуальном хосте 369 
 II.14.4. Слишком большие файлы на виртуальном хосте 371 
 Главa II.15. Разное 373 
 II.15.1. Обмен значений переменных 373 
 II.15.2. Скрипт предзагрузки страницы 374 
 II.15.3. Эмуляция утилиты tar 375 
 II.15.4. Буферизация данных 378 
 ПРИЛОЖЕНИЯ 381 
 Приложение 1 
 . Вопросы взлома и безопасности, напрямую не связанные с кодированием 383 
 Что такое прокси-сервер и зачем он нужен? 383 
 Классификация прокси-серверов 383 
 Анонимные прокси-серверы 386 
 Настройка браузера Internet Explorer для работы с прокси-сервером 389 
 Как построить цепочку из прокси-серверов? 390 
 Что такое port mapping? 392 
 Прокси-серверы и DNS-серверы 392 
 PAC-файлы 393 
 Где взять списки бесплатных прокси-серверов? 394 
 Зачем нужны постоянные обновления списков прокси-серверов? 395 
 Почему бесплатные прокси-серверы исчезают? 395 
 Проверка работоспособности прокси-серверов 396 
 Полезные ссылки 398 
 Приложение 2. Преступность в IT 400 
 Виды преступлений в IT-отрасли 400 
 Глава 28 УК РФ 409 
 Спрашивайте — отвечаем 413 
 Приложение 3 
 . Введение в социальное программирование или кто такие социальные хакеры 418 
 Несколько примеров 418 
 Психология = программирование 422 
 Социальное программирование 422 
 Трансактный анализ 423 
 Введение в НЛП 437 
 Заключение или как стать социальным программистом 448 
 Приложение 4. Описание компакт-диска 450 
 Предметный указатель 451 
 X Оглавление IX Оглавление