Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

SQL-инъекции

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
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:
кавычка - &quot; (числовой код не помню)
апостроф - & # 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 (в форумах или чатах, к примеру)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...