Подделка межсайтовых запросов (CSRF)
Описание :
Основная идея состоит в том, чтобы ввести пользователя на страницу, где его браузер инициирует запрос POST или GET к CMS, которую вы атакуете.
Представьте, что вы знаете адрес электронной почты администратора сайта, работающего на CMS. Отправьте ему по электронной почте какую-нибудь забавную веб-страницу с тем, что вы хотите на ней. На этой странице вы создаете форму с данными, используемыми панелью администратора CMS для создания нового пользователя-администратора. Отправьте эти данные в панель администратора сайта, в результате чего появится скрытый iframe вашей веб-страницы. Вуаля, у вас есть собственная учетная запись администратора.
Как это предотвратить:
Обычный способ — генерировать случайное короткоживущее (от 15 минут до часа) одноразовое значение во всех ваших формах. Когда ваша CMS получает данные формы, она сначала проверяет, в порядке ли одноразовый номер. В противном случае данные не используются.
Примеры CMS:
Дополнительная информация :
На странице Википедии и на странице проект OWASP.
Сохранение неверного пароля
Описание :
Представьте, что вашу базу данных взломали и опубликовали на чем-то вроде WikiLeak. Зная, что большая часть ваших пользователей использует одни и те же логин и пароль для многих веб-сайтов, вы хотите, чтобы их было легко получить?
Нет. Вам необходимо смягчить ущерб, если данные вашей базы данных станут общедоступными.
Как это предотвратить:
- Первая идея состоит в том, чтобы хешировать их. Это плохая идея из-за радужных таблиц (даже если хэш не md5, а sha512, например ).
- Вторая идея: добавить уникальную случайную соль перед хешированием, чтобы хакерам приходилось перебирать каждый пароль. Проблема в том, что хакер может быстро вычислить много хэша.
- Итак, текущая идея состоит в том, чтобы замедлить хеширование паролей: вам все равно, потому что вы не делаете это часто. Но злоумышленник будет плакать, когда он получит от 1000 хэшей, сгенерированных за мс, до 1.
Чтобы упростить этот процесс, вы можете использовать библиотеку phpass, разработанную каким-то гуру паролей.
Примеры CMS:
Дополнительная информация :
страница phpass.
Межсайтовый скриптинг (XSS)
Описание
Цель этих атак — заставить ваш веб-сайт отображать некоторый скрипт, который будет выполняться вашим законным пользователем.
У вас есть два типа: постоянные или нет. Первый обычно исходит из того, что ваш пользователь может сохранить, другой рассчитывает параметры, заданные отправленным запросом. Вот пример, не постоянный:
<?php
if(!is_numeric($_GET['id'])){
die('The id ('.$_GET['id'].') is not valid');
}
?>
Теперь ваш злоумышленник может просто отправлять ссылки типа http://www.example.com/vulnerable.php?id=<script>alert('XSS')</script>
Как это предотвратить
Вам нужно фильтровать все, что вы выводите клиенту. Самый простой способ — использовать htmlspecialchars, если вы не хотите, чтобы ваш пользователь сохранить любой html. Но когда вы позволяете им выводить html (либо их собственный html, либо сгенерированный из других вещей, таких как bbcode), вы должны быть очень осторожны. Вот старый пример использования события onerror тега img: уязвимость vBulletin. Или у вас есть старый Samy с Myspace.
Примеры CMS:
Дополнительная информация :
Вы можете проверить википедию и OWASP. У вас также есть много векторов XSS на странице ha.ckers.
Внедрение заголовка почты
Описание :
Заголовки почты разделяются последовательностью CRLF (\r\n
). Когда вы используете некоторые пользовательские данные для отправки писем (например, используя их для From: или To:), они могут вводить больше заголовков. При этом они могут отправлять анонимные письма с вашего сервера.
Как это предотвратить:
Отфильтруйте все символы \n
, \r
, %0a
и %0d
в заголовках.
Примеры CMS:
Дополнительная информация :
Википедия, как обычно, хорошее начало.
SQL-инъекция
Описание :
Старая классика. Это происходит, когда вы формируете SQL-запрос, используя прямой ввод пользователя. Если этот ввод создан так, как нужно, пользователь может делать именно то, что он хочет.
Как это предотвратить:
Простой. Не формируйте SQL-запросы с пользовательским вводом. Используйте параметризованные запросы. Рассматривайте любой ввод, который не закодирован вами, как пользовательский ввод, будь то, например, из файловой системы, вашей собственной базы данных или веб-сервиса.
Пример CMS:
Дополнительная информация :
Википедия и OWASP есть действительно хорошие страницы на эту тему.
Разделение HTTP-ответа
Описание :
Как и заголовки электронной почты, заголовки http разделяются последовательностью CLRF. Если ваше приложение использует пользовательский ввод для вывода заголовков, они могут использовать это для создания своих собственных.
Как это предотвратить:
Как и в случае с электронными письмами, отфильтруйте \n
, \r
, %0a
и %0d
символы из пользовательского ввода, прежде чем использовать его как часть заголовка. Вы также можете urlencode заголовки.
Примеры CMS:
Дополнительная информация :
Я позволю вам немного угадать, где вы можете найти много информации об этом виде атаки. OWASP и Википедия.
Перехват сеанса
Описание :
В этом случае злоумышленник хочет использовать сеанс другого законного (и, надеюсь, аутентифицированного) пользователя. Для этого он может либо изменить свой собственный файл cookie сеанса, чтобы он соответствовал файлу cookie жертвы, либо заставить жертву использовать свой собственный идентификатор сеанса (агрессора).
Как это предотвратить:
Здесь нет ничего идеального: - если злоумышленник украдет куки жертвы, вы можете проверить, соответствует ли сессия пользователя IP-адресу пользователя. Но это может сделать ваш сайт бесполезным, если законные пользователи используют прокси, которые часто меняют IP. - если злоумышленник заставляет пользователя использовать свой собственный идентификатор сеанса, просто используйте session_regenerate_id изменить идентификатор сеанса пользователя при изменении его прав (вход, выход из системы, вход в административную часть сайта и т. д.).
Примеры CMS:
Дополнительная информация :
страница Википедии по этому вопросу.
Другой
- Пользовательский DoSing: если вы предотвратите перебор попыток входа в систему, отключив пробуемые имена пользователей, а не IP-адрес, с которого исходят попытки, любой может заблокировать всех ваших пользователей через 2 минуты. То же самое при создании новых паролей: не отключайте старый, пока пользователь не подтвердит новый (например, войдя с ним).
- Использование пользовательского ввода, чтобы сделать что-то в вашей файловой системе. Отфильтруйте это, как если бы это был рак, смешанный со СПИДом. Это касается использования include и require для файлов, путь которых частично определяется пользовательским вводом.
- Используя eval, система, exec или что-то в этом роде с пользовательским вводом.
- Не помещайте файлы, к которым вы не хотите иметь доступ в Интернете, в доступный для Интернета каталог.
Вы можете многое прочитать на странице OWASP.
person
Community
schedule
01.06.2010