SQL-инъекции

romanich

Новичок
SQL-инъекции

В создании кода не использовалась не одна функция для защиты от SQL-атак.
PHP:
$res=mysql_query("select * from counter where `login`='".$login."' and `pass`='".$pass."' ") or die(mysql_error());
$row=mysql_fetch_array($res);

if ( mysql_num_rows($res)==1){
$id=$row['id'];
$day=time();
mysql_query("UPDATE counter SET `dateuser`='$day' WHERE `id`='$id' ") or die (mysql_error());
Сама форма запроса:
PHP:
<form method="post" action="info/index.php">
<table width="100%"  border="0" cellspacing="5" cellpadding="0">
<tr>
<td><div class="block_left3">Логин:</div></td>
<td><input type="text" size="20" name="login"></td>
</tr>
<td><div class="block_left3">Пароль:</div></td>
<td><input type="password" size="20" name="pass"></td>
<tr>
<td colspan="2"><div class="block_left3"><input type="submit" value="Войти"></div></td>
</table>
</form>
В форму запроса где Логин набираю ' or 1=1
Поля пароля оставляю пустым

Получаю
PHP:
 }else {
    
echo "<p>Попробуйте, пожалуйста, набрать логин с паролем еще раз.</a>
";} }
Почему SQL не пропускает такой запрос? Версия MySQL: 4.0.24.
 
romanich
перед выполнением запроса - напиши:
PHP:
echo "select * from counter where `login`='".$login."' and `pass`='".$pass."' ";
 

romanich

Новичок
Автор оригинала: Loshadka
romanich
перед выполнением запроса - напиши:
PHP:
echo "select * from counter where `login`='".$login."' and `pass`='".$pass."' ";
Чтобы посмотреть как обработается мой запрос?
Но меня интересует вопрос атак. Человек который будет пытаться атаковать сайт, такой команды написать не сможет.

Так нужна ли вообще защита от SQL-атак?

-~{}~ 21.12.05 10:47:

Автор оригинала: Vladson
romanich
Почитайте про magic_quotes_gpc и многое станет ясно :)
Так с этих функций я и заинтересовался. Нашел материал, который описыает системы взлома. Решил попробовать на собственном примере, где в принципе мне все известно. Но результат пока ноль.
 
romanich
ты сделал то, что я тебе сказал?
посмотри, какой запрос у тебя выполняется.

и тебе многое станет ясно.
 

ForJest

- свежая кровь
Почему SQL не пропускает такой запрос? Версия MySQL: 4.0.24.
Видимо потому что нужно добавить вторую кавычку :).
Если под "не пропускает" имеется ввиду "выдаёт ошибку".
 

Фанат

oncle terrible
Команда форума
romanich
нет, защита не нужна. тебе - не нужна.
если ты думал, что тебя здесь кто-то уговаривать будет, то ты жестоко ошибся.

если ты не собираешься делать то, что тебе сказали в ответ на твой вопрос, то не надо вообще никаких вопросов задавать.
Чтобы посмотреть как обработается мой запрос?
Но меня интересует вопрос атак.
никого не интересует, что тебя интересует.
сначала сделай, а потом рассуждай.
 

romanich

Новичок
Автор оригинала: Фанат
romanich
нет, защита не нужна. тебе - не нужна.
если ты думал, что тебя здесь кто-то уговаривать будет, то ты жестоко ошибся.

если ты не собираешься делать то, что тебе сказали в ответ на твой вопрос, то не надо вообще никаких вопросов задавать.

никого не интересует, что тебя интересует.
сначала сделай, а потом рассуждай.
Да блин-банан, по русски читать умеем или нет?
Попробую так:
PHP:
$mlya_mlya_mlya="Если я задал вопрос по поводу защиты, значит меня этот вопрос интересует.
Меня также интересует почему у меня не получается атаковать БД теми способами, которые были приведены.
Я описал код запроса, описал форму, с которой идет запрос. Написал что я вводил в поля формы.
Что еще нужно чтобы получить ответ, а не стандртную цитату из топиков, типа \"Сам дурак\";
print $mlya_mlya_mlya;
 
romanich
если тебя так интересуют ответы, то сделал ли ты то, что тебе сказали?
 

Фанат

oncle terrible
Команда форума
Меня также интересует почему у меня не получается атаковать БД теми способами, которые были приведены.
о, ответ на этот вопрос элементарен.
руки кривые.
 

romanich

Новичок
Автор оригинала: Loshadka
romanich
если тебя так интересуют ответы, то сделал ли ты то, что тебе сказали?
Перекачиваю базы, сейчас все сделаю.

-~{}~ 21.12.05 12:52:

Автор оригинала: Фанат
о, ответ на этот вопрос элементарен.
руки кривые.
О чем мной и было сказано ранее. Ответ типа "Сам дурак". Другого я и не ждал. Спасибо хоть на этом, Вы мне сильно помогли. Удачи.
 

romanich

Новичок
Loshadka
При запросе ' or 1=1
выдает ошибку select * from counter where `login`='' or 1=1' and `pass`='' You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' and `pass`=''' at line 1

Хотя это уже что-то. Получаем имя таблицы, и название двух полей. Хотя название полей я и так могу узнать по html-форме.

Если сделать так:
' or '1=1
пишет следующее:select * from counter where `login`='' or '1=1' and `pass`=''
Попробуйте, пожалуйста, набрать логин с паролем еще раз.

Я понимаю, что сравнивая два числа кавычки не нужны. Но как можно обойти это?
 

romanich

Новичок
Автор оригинала: MuXa247
' or '1'='1

Но только если magic_quotes_gpc = off
Бестолку
select * from counter where `login`='' or '1'='1' and `pass`=''
Попробуйте, пожалуйста, набрать логин с паролем еще раз.

Скорее всего magic_quotes_gpc = on
Если эта функция добавляет слешь "/", нужно ли еще как-то обезапасить SQL-запросы? Где могут быть еще подводные камни?
 

romanich

Новичок
baev
Впрочем, если вы хотите написать переносимое приложение, не зависящее от настроек PHP, то написать его всё равно придётся. И включать отдельным блоком в начале ваших скриптов).

Все понял. Спасибо.
 

Фанат

oncle terrible
Команда форума
Ответ типа "Сам дурак".
совершенно верно.
если ты НЕ В СОСТОЯНИИ составить SQL запрос без ошибок, а способен только, как обезьяна, подставлять в свой скрипт готовые "примеры" взлома, то тебе просто ещё рано задаваться таким вопросом. просто научись составлять запросы сначала.
Хотя название полей я и так могу узнать по html-форме.
гы-гы
Хотя это уже что-то. Получаем имя таблицы, и название двух полей.
опупеть.
ему велели прочитать ошибку ДЛЯ СЕЬЯ, а он решил, что её надо для взлома пользователю выкатить.
Все понял. Спасибо.
интересно, в чём был смысл этой тирады? по ходу, аффтар решщил отрубить волшебные кавычки, чтобы сделать свои скрипты уязвимыми, наконец =)
 

romanich

Новичок
Фанат
Если бы я был в состоянии составить SQL запрос без ошибок, то наверное бы не задавал данный вопрос на форуме. Насколько я понял, то форум создан именно для вопросов. Или я не прав?
А если Вы действительно знаете (?) что к чему, то перестаньте ёрничать и подскажите. Тем более, если Вы такой же профи в программировании, как и в диалектике, то для Вас это не составит труда.
 

Фанат

oncle terrible
Команда форума
Если бы я был в состоянии составить SQL запрос без ошибок
отлично.
вот и учись составлять запросы.
задавай вопросы про это.
а инъекции тебе пока не по зубам.
 
Сверху