Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Marmota Bobak
Зарегистрирован: 28.07.2004 Сообщения: 68
|
Добавлено: Чт Сен 08 2005 03:11 Заголовок сообщения: SQL-инъекции |
|
|
разоабрался с инъекциями, сервак выполняет запрос вида :
SELECT a1 FROM table 1 UNION SELECT a2 FROM table2
Только вот что мне с этим запросом можно сделать? Т.е. я отослал серверу SQL-запрос на выбор a2 из table2, но ведь php-код не возвратит мне значение a2... |
|
Вернуться к началу |
|
|
Anvano
Зарегистрирован: 24.03.2005 Сообщения: 58
|
Добавлено: Чт Сен 08 2005 10:48 Заголовок сообщения: Re: SQL-инъекции |
|
|
Marmota Bobak писал(а): | разоабрался с инъекциями, сервак выполняет запрос вида :
SELECT a1 FROM table 1 UNION SELECT a2 FROM table2
Только вот что мне с этим запросом можно сделать? Т.е. я отослал серверу SQL-запрос на выбор a2 из table2, но ведь php-код не возвратит мне значение a2... |
1. Вопрос не ясен (какая БД, в чем заключается инъекция в твоем случае)
2. С чего ты взял, что не возвратит? |
|
Вернуться к началу |
|
|
Marmota Bobak
Зарегистрирован: 28.07.2004 Сообщения: 68
|
Добавлено: Чт Сен 08 2005 20:54 Заголовок сообщения: |
|
|
БД MySQL, язык PHP
Короче, сайт нужно протестить на взлом. На нем обнаружена дырка : есть страница поиска по сайту. На ней текстовое поле типа <input name="seek".....>. Значение этого поля передается методом GET скрипту seek_in_site.php.
Сначала я просто ввел в seek кавычку '. Оказалось, в seek_in_site.php она не экранируется, и скрипт выдал ошибку MySQL о неверном запросе. Ну и сам запрос выдал, там что-то типа
SELECT COUNT(*) as count FROM search_page_index WHERE 1=1 AND MATCH (body) AGAINST (' вот сюда помещается значение seek '). Тогда я в seek ввел такую строку:
') OR 1=1 UNION SELECT id FROM users /*
В итоге получается запрос:
SELECT COUNT(*) as count FROM search_page_index WHERE 1=1 AND MATCH (body) AGAINST ('') OR 1=1 UNION SELECT id FROM users /*')
Ошибки не выдается, и запрос, я предполагаю, действительно выполняется в seek_in_site.php. Но ведь потом, на странице, куда выводятся результаты поиска, PHP-скрипт выбирает, что конкретно из вытащенной из БД инфы выводить, т.е. там что-то вроде print $row['count'] (см. изначальный запрос - ищется именно count).
Т.е. получается, что SQL, наряду с нужной инфой, вернул id юзеров, но скрипт их просто так не напечатает! |
|
Вернуться к началу |
|
|
mad_alexx
Зарегистрирован: 14.01.2005 Сообщения: 154 Откуда: Иркутск
|
Добавлено: Пт Сен 09 2005 05:15 Заголовок сообщения: |
|
|
Чтобы увидеть id пользователей, запрос должен быть примерно таким:
Код: |
SELECT a1 FROM table 1 UNION SELECT a2 AS a1 FROM table2
|
Как бороться? Наверное заменять кавычки и апострофы их кодами в HTML:
кавычка - " (числовой код не помню)
апостроф - & # 0 3 9 ; (только без пробелов) |
|
Вернуться к началу |
|
|
Anvano
Зарегистрирован: 24.03.2005 Сообщения: 58
|
Добавлено: Пн Сен 12 2005 09:46 Заголовок сообщения: |
|
|
Не надо ничего менять при занесени в базу.
Есть специальные функции для этого.
Перед передачей любого строкового параметра в MySQL запрос необходимо делать
$param = mysql_escape_string($param);
Плюс еще в зависимости от настроек Magic Quotes в PHP.INI применять addslashes() stripslashes()
В базе всё должно храниться в оригинальном виде. А вот уже при выводе информации из базы в HTML виде можно применять htmlspecialchars() - это не позволит пользователям вставлять HTML теги и JavaScript (в форумах или чатах, к примеру) |
|
Вернуться к началу |
|
|
|