Введение | 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. Хранение МРЗ-файлов в базе данных | 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 |
1.12.5. Определение сетевого адреса по IP-адресу | 81 |
1.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 |
|
Глава 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 |
|
Глава II.10. Протокол HTTP | 314 |
|
II.10.1. Загрузка страницы | 314 |
II.10.2. Получение HTTP-заголовков с сервера | 318 |
II.10.3. Определение размера файла на удалённом хосте | 320 |
II.10.4. Отправка данных методом POST | 321 |
|
Глава 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 |
|
Глава 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 |
|
Глава II.14. Шпионские скрипты | 359 |
|
II.14.1. Слежение за ссылкой на удалённой странице | 359 |
II.14.2. Проверка ссылочной целостности | 366 |
II.14.3. Новые файлы на виртуальном хосте | 369 |
II.14.4. Слишком большие файлы на виртуальном хосте | 371 |
|
Глава 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 |