Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: проблема с mail()

Сообщения:  [1-10]    [11-20]  [21-22] 

 
 автор: Valick   (07.07.2009 в 22:49)   письмо автору
 
   для: qsef   (07.07.2009 в 22:14)
 

И будут сравниваться хеши, а не код, т. е. sql injection будет невозможна.
Это далеко не так, не путайте sql запрос с выводом в браузер
Инъекция будет возможна в любом случае при неграмотной обработке входящих данных, не думайте что изобрели "кремлёвскую таблетку".
Пример инъекции Вам привёл Trianon, Вы судя по всему пропустили это мимо ушей, раз до сих пор думаете защититься от зловредов при помощи md5

  Ответить  
 
 автор: qsef   (07.07.2009 в 22:14)   письмо автору
 
   для: Trianon   (07.07.2009 в 21:42)
 

>На вычисление хеша будет положено на 4 порядка больше ресурсов, чем на экранирование кавычек!
Ага, понял. Просто возникла такая идея и я спросил.
>И?
И будут сравниваться хеши, а не код, т. е. sql injection будет невозможна.

  Ответить  
 
 автор: Trianon   (07.07.2009 в 21:42)   письмо автору
 
   для: qsef   (07.07.2009 в 20:55)
 

>Почему хеши? В переменной $name может быть зловредный код и если сравнить его напрямую, то код исполнится(имеется ввиду, что $name необработанная переменная).

Так обработайте её перед укладыванием в запрос! Зачем же извращаться-то?
На вычисление хеша будет положено на 4 порядка больше ресурсов, чем на экранирование кавычек!

>А md5() преобразует код в хеш.

И?

  Ответить  
 
 автор: qsef   (07.07.2009 в 20:55)   письмо автору
 
   для: Trianon   (07.07.2009 в 20:47)
 

Почему хеши? В переменной $name может быть зловредный код и если сравнить его напрямую, то код исполнится(имеется ввиду, что $name необработанная переменная).
А md5() преобразует код в хеш.

  Ответить  
 
 автор: Trianon   (07.07.2009 в 20:47)   письмо автору
 
   для: qsef   (07.07.2009 в 20:37)
 

этот код принципиально другой. Его даже можно применить без особой опаски.

Хотя опять же неясно, зачем сравнивать хеши, если можно сравнить сами имена.

  Ответить  
 
 автор: qsef   (07.07.2009 в 20:37)   письмо автору
 
   для: Trianon   (07.07.2009 в 18:08)
 

Вообще идея была такая, в выражении сравниваются два хеша, если символы внутри функции md5() разные, то и хеши будут разные и как результат не совпадут.

"SELECT * FROM tbl WHERE md5(alias) = '".md5($name)."'";

  Ответить  
 
 автор: Trianon   (07.07.2009 в 18:08)   письмо автору
 
   для: qsef   (07.07.2009 в 17:42)
 

>Просто у меня есть запрос:
>"SELECT id FROM tbl WHERE name = '$name'";
Это не запрос. Это целое выражение вида
"SELECT id FROM tbl WHERE name = '" . $name . "'"

которое еще нужно вычислить до того, как его результат может быть станет запросом.

Даже если
>$name - это строка из GET-запроса:
>
http://sait.com/$name/


А если нет?

  Ответить  
 
 автор: qsef   (07.07.2009 в 17:42)   письмо автору
 
   для: Trianon   (07.07.2009 в 13:41)
 

>Если не экранированы - md5 от зловредного кода никак не спасет.
Вот это я и хотел узнать.
Просто у меня есть запрос:

"SELECT id FROM tbl WHERE name = '$name'";

$name - это строка из GET-запроса:

http://sait.com/$name/


Большое спасибо.

  Ответить  
 
 автор: Trianon   (07.07.2009 в 13:41)   письмо автору
 
   для: qsef   (07.07.2009 в 12:54)
 

если в $name кавычки уже экранированы - никакого зловредного кода не будет.
Если не экранированы - md5 от зловредного кода никак не спасет.
Пример (для исправленных синтаксических ошибок) :
$name = "') OR (''='";


Судя по тому, что Вы до сих пор ошибку не исправили, весь этот диспут - корм совершенно не в коня.
Пример для Вашего случая :
$name = "'0') OR (1";


Формально допуская, однако, что автор кода куда хитрее, чем кажется...
нет. Тогда бы он не стал применять md5 с обеих сторон от знака равенства
.

  Ответить  
 
 автор: qsef   (07.07.2009 в 12:54)   письмо автору
 
   для: Valick   (07.07.2009 в 12:45)
 

Если в $name будет зловредный код, то md5() преобразует его в хеш.
В запросе сравниваются два хеша: ...WHERE md5(name) = md5($name)
если они не совпадают, то и не выполняются. Вот я и спрашиваю, возможна ли здесь атака?

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-22] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования