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

Форум MySQL

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

 

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

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

тема: Защита от SQL иньекций

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

 
 автор: Тень&   (25.02.2010 в 18:47)   письмо автору
 
   для: tvv123456   (25.02.2010 в 00:25)
 

А вот, кстати, пример уязвимости, придумал:

<?php

$a 
"  \\";
$b ", b = (SELECT password FROM users WHERE user_id = 1) WHERE id = 2/*";

$sql "UPDATE table SET a = '{$a}', b = '{$b}' WHERE id = 1";

echo 
$sql;

?>

UPDATE table SET a = ' \', b = ', b = (SELECT password FROM users WHERE user_id = 1) WHERE id = 2/*' WHERE id = 1


Обе строки, как предполагается, передаются от пользователя. Они обе вообще не содержат апострофов, но уязвимость есть.

Но это чисто ради интереса, опять же. Уязвимости -- лишь побочный эффект от неправильной обработки данных, притом не единственный.

  Ответить  
 
 автор: TrianoN   (25.02.2010 в 13:30)   письмо автору
 
   для: Николай2357   (25.02.2010 в 12:59)
 

Так я и говорю "залепил по привычке" - камень преткновения.

Кроме того, я с некоторых про отвергаю сам термин "экранированные данные" .
Данные, в моем представлении могут быть либо сырыми, либо оформленными в виде литеральной строки. То, что во втором случае придется заняться экранированием - вторично.

  Ответить  
 
 автор: Николай2357   (25.02.2010 в 12:59)   письмо автору
 
   для: Trianon   (25.02.2010 в 11:41)
 

>Если да - она возникнет, когда определение этой функции изменят.
Дело не в этом, синоним или нет. Я использую обертку, кто то нет - не суть.

Дело в чем там было - обнаружилась дырка в одном скрипте, меня попросили посмотреть. Функция была довольно внушительна и вот такое
<?
$value 
"'"mysql_real_escape_string($value)  ."'";
стояло в начале. А запрос в конце.
А автор при обработке тупо пропустил одну переменную.
Я и не заметил этих строк в начале функции. А так как точно знал, что данные в одно из полей попадают неэранированными, залепил в запросе всем строковым полям по привычке тоже самое. Подумав что обработки нет вовсе. В результате то поле, которое было дырявым, стало работать нормально. А остальные нет, так как там оказались экранированные бэкслэши.
И самое обидное, что это не синтаксическая ошибка - её хватились спустя некоторое время.

По этому я и сказал, что уютнее это делать в самом запросе, а не отдельно.

  Ответить  
 
 автор: Trianon   (25.02.2010 в 11:41)   письмо автору
 
   для: Николай2357   (24.02.2010 в 18:39)
 

Я не это имел ввиду, а это:
<?
"...... = '". s_slash($value) ."'......."

s_slash - синоним mysql_real_escape_string() ?
Если нет - дыра налицо.
Если да - она возникнет, когда определение этой функции изменят.

  Ответить  
 
 автор: Николай2357   (25.02.2010 в 07:46)   письмо автору
 
   для: tvv123456   (25.02.2010 в 00:25)
 

Для начала, раз в базе торчат бэкслэши, прочитайте внимательно этот топик. В самом начале есть про магические кавычки - наверняка они у Вас включены.
Отключите их.
Потом попробуйте выполнить запрос с обработкой (не фильтрацией!!!!!! это не тот термин) литеральных констант (проще строковыхъ значений) функцией mysql_real_escape_string().
И посмотрите, что будет находиться в базе.
Надеюсь пропадет желание извращать изобретать то, что сто лет как придумано.

  Ответить  
 
 автор: tvv123456   (25.02.2010 в 00:25)   письмо автору
 
   для: Trianon   (24.02.2010 в 23:48)
 

там что-то с амерсандом было
а вчем зедсь проблема?
Ну правда
Я вообще ничего не шарю в php обьясните пожалуйста

  Ответить  
 
 автор: пупсик   (25.02.2010 в 00:23)   письмо автору
 
   для: Trianon   (24.02.2010 в 23:48)
 

реально ребята а какая здесь уязвимость
смотрела 21 задачу

но все-таки у tvv123456 вроде свежий взгляд на решение проблемы

  Ответить  
 
 автор: Trianon   (24.02.2010 в 23:48)   письмо автору
 
   для: tvv123456   (24.02.2010 в 23:29)
 

Где дыра, можно понаблюдать, решая задачу 21, придуманную специально для этого.

  Ответить  
 
 автор: tvv123456   (24.02.2010 в 23:40)   письмо автору
 
   для: Тень&   (24.02.2010 в 23:36)
 

Вы тут уже говорите об XSS? действительно сложно понять
Ну как я понял заэкранируете вы весь запрос и попытаетесь там вставить свой и пото мзакрыть апостроф но ведь с этого(о боже ) будет ошибочка.

  Ответить  
 
 автор: Тень&   (24.02.2010 в 23:36)   письмо автору
 
   для: tvv123456   (24.02.2010 в 23:29)
 

А даже если бы и не было дыры, то что? Допустим на секунду, что можно обрушить запрос (хоть явной уязвимости тут не наблюдается), если подставить в конец бекслеш. Ну и что? Ты тут же найдёшь HTML-представление бекслеша -- и вуаля. Опять вроде бы всё работает. Ты так и будешь переводить все "опасные" (о боже) символы в их HTML-представления. То есть вместо SQL-экранирования ты подставляешь просто HTML-экранированную строку. Задумайся как тебе "повезло": HTML-представление вида &#123; не содержит ни одного "опасного" (о боже) символа.

Так и поступай. Вперед. Все учатся на ошибках.

  Ответить  

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

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

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