Новый взгляд на SQL injection.

valyala

Новичок
Новый взгляд на SQL injection.

На http://securitylab.ru появилась замечательная статья про SQL injection. Казалось бы, по этой теме давно все известно. Но в статье http://www.securitylab.ru/49424.html приводятся способы получения произвольной информации из БД с помощью бесполезных на первый взгляд дырок. Например,
PHP:
error_reporting(0);
// ....
$result=@mysql_num_rows(mysql_query("SELECT status FROM users WHERE status=$id"));
if (!$result) { $result = 0; }
echo "Found: $result";
или
PHP:
error_reporting(0);
// ... подключение к базе данных ...
@mysql_query("UPDATE stat SET num=num+1 WHERE id=$id");
echo "OK";
Знаете, как получить информацию из БД с помощью дырки во втором примере? Нет? Тогда читайте статью и удивляйтесь :)
 

fixxxer

К.О.
Партнер клуба
сначала определяем длину, потом посимвольный перебор
старО :) так ломался phpBB 2.0.4
 

confguru

ExAdmin
Команда форума
intval($id)
и регексп на последний пример
и проблема решена. :)
 

valyala

Новичок
intval($id)
и регексп на последний пример
и проблема решена.
admin, в статье поднимается вопрос не о том, как защититься от SQL-injection (вообще, это должен знать каждый программист, хоть раз работавший с БД), а о том, как ее использовать для получения произвольных данных из БД.
ну сколько можно мусодить SQL injection ?
Demiurg, если б это была рядовая статья на тему SQL-injection, я бы не начинал эту тему. Статья весьма интересная и неординарная. Советую всем прочитать для самообразования.
 
В MySQL числа берем в кавычки как и строками и инъекции отдыхают.
 

Фанат

oncle terrible
Команда форума
О, такого профессионального комментария этой теме явно не хватало!
 
О, такого профессионального комментария этой теме явно не хватало!
А чем комментарий не нравится?

SELECT * FROM tbl WHERE id = '2';
и даже:
SELECT * FROM tbl WHERE id = '2\'asdsad';
эквивалентно:
SELECT * FROM tbl WHERE id = 2;

Посему, если числа предварительно обрабатывать так же, как и строки (т.е. квотить) и брать в кавычки, инъекции отдыхают.
 

Фанат

oncle terrible
Команда форума
В MySQL числа приводим к числовому типу и инъекции отдыхают.

вот твой комментарий примерно такого же плана.
по сути - не придерешься.

Однако в контексте темы не имеет ни малейшего смысла.
Поскольку вопрос защиты от инъекций во-первых, шире, а во-вторых, разговор НЕ О НЁМ вообще. А в-третьих, никому америки ты своим глубокомысленным комментарием не открыл.
 

alx99

Новичок
[Offtopic]
в нете много интересных статей
например
Microsoft SQL Server против MySQL в медицинских информационных системах
http://www.citforum.ru/database/articles/msmysql/
:)

..Так, выполнение запроса №3 осуществляется MySQL на 51,1% медленнее, чем MS SQL Serve..
...MySQL выполняет запрос №1 (SELECT * FROM lvn) в 347,2 раза медленнее, чем СУБД MS SQL Server 7.0...
[/Offtopic]
 

Фанат

oncle terrible
Команда форума
Я убил полчаса своего времени, чтобы прочитать этот бред сивой кобылы. А теперь должен убивать ещё, чтобы объяснить человеку, который сам не в состоянии прочесть прикладывая мозги.
Тестировалась в статье скорость чего угодно - самопальных приложений этих горе-тестеров, супер-система ODBC - но только не сами субд. Тестировалась кривость рук тестеров, а не кривость баз.

Неужели так трудно сообразить, что гигантские цифры для mysql - это скорость ни хрена не СУБД, а канала передачи 74 мегабайт? Этих самых одбц и клиентского приложения?

А у тебя не вызывает подозрений тот факт, что МС все эти 74 мегабайта передала за 14 миллисекунд? У тебя винт за такое время просто файл с диска не отдаст.
Или познания в железе у тебя столь же слабы, как и логические способности?

А о такой вещи, как настройки БД ты когда-нибудь слышал?

А ты не забыл, что пишешь в форум по пхп. в форум по веб-девелопменту? И много ты видел на веб-серверах мс-скл?

Есть мнение, что товарищи писали обоснование на жирное финансирование. А потом это махровое враньё попало на помойку - цит-форум.

-~{}~ 24.11.04 16:05:

Специфика медицинской деятельности приводит к тому, что в системе редко исполняются запросы вида select * from <tablename>, когда необходима обработка всей таблицы и передача по сети больших объемов данных. Чаще всего используются либо запросы за агрегированной информацией, либо запросы к определенной выборке. Все вышесказанное определило основной интерес исследования: изучить, насколько быстро исполняются запросы №1, 2 и 3, являющиеся наиболее показательными представителями
запрос N1 - select * from <tablename>
так, все-таки - редко используются, или являются показательными?

на сайте MySQL на лето 2004 программы для управления СУБД имели низкую устойчивость в работе
20 строк ниже
СУБД MySQL, которая обладает достаточным уровнем устойчивости работы
у тебя еще есть сомнения, что статю эту писал не клиент дурдома?
 

Фанат

oncle terrible
Команда форума
А ты зря воспринял статью на секьюритилабе несерьезно.
 
Сверху