Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> будет ли SQL инъекция? 
V
    Опции темы
gcc
Дата 4.9.2010, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



в существующей программе нашел код, СУБД - MySQL:

Код

      $db->Exec("UPDATE Files SET file_fld_id=? WHERE usr_id=? AND file_id IN 
      (".join(',',@{&ARef($f->{file_id})}).")",$fld_id,$ses->getUserId);


$f->{file_id} - идет с html form'ы и ни на какие проверки не проверяется!
и в ARef проверок, тоже, нету

1) будет ли тут инъекция?
2) так же вопрос: если вместо UPDATE поставить SELECT запрос, будет ли инъекция в IN ?


автор кода не я, можно предположить что тут не будет инъекции?


я бы поставил параметрический запрос, или хотябы проверил бы что все значения массива $f->{file_id}) исключительно ЦИФРА $_ !~ /^\d+$/




Это сообщение отредактировал(а) gcc - 4.9.2010, 11:05
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 6.9.2010, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



gcc, по поводу инъекции ответ, вроде, очевиден: UPDATE Files SET file_fld_id=? WHERE usr_id=? AND file_id IN ("") OR usr_id=1 OR file_id IN("0").
По поводу SELECT: насколько я знаю, при использовании DBD::mysql и выключенной опции mysql_multi_statements выполнение нескольких запросов, указанных через разделитель невозможно, поэтому невозможно и изменение данных.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
ming
Дата 6.9.2010, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 30.1.2009
Где: Новосибирск

Репутация: 2
Всего: 3



Приём "prepared statement + placeholders" как раз и призван защитить от SQL-инъекций.
Подробнее, например тут: http://stackoverflow.com/questions/2300765...using-perls-dbi

Это сообщение отредактировал(а) ming - 6.9.2010, 17:58
PM MAIL ICQ Jabber   Вверх
KSURi
Дата 6.9.2010, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



Для запросов с IN() placeholder'ы не подойдут. Вариант:
Код

my @ids = map $dbh->quote($_), @{&ARef($f->{file_id})};
local $" = ',';
$db->Exec("UPDATE Files SET file_fld_id=? WHERE usr_id=? AND file_id IN 
      (@ids)",$fld_id,$ses->getUserId);



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ginnie
Дата 6.9.2010, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



KSURi, почему не подойдут?

Код

$db->Exec("UPDATE Files SET file_fld_id=? WHERE usr_id=? AND file_id IN(".join(',', ('?') x  @{&ARef($f->{file_id})}).")", $fld_id,$ses->getUserId, @{&ARef($f->{file_id})});


 smile 


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 7.9.2010, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



mingKSURi, оно написанное не мной и написано в том виде в котором я написал в первом посте... по этому хотел спросить будет ли тут дырка...



ginnie
эта опция mysql_multi_statements по умолчанию выключенная? вродебы... (я ее не включал, а в настройках вродебы выключенная)

т.е тут дырки не будет? запросы Insert,update,drop,delete и т.д. не вставятся в IN ?

Это сообщение отредактировал(а) gcc - 7.9.2010, 13:11
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 7.9.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата(gcc @  7.9.2010,  11:46 Найти цитируемый пост)
запросы Insert,update,drop,delete и т.д. не вставятся в IN ?

Запросы вставятся, но работать не будут.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 8.9.2010, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



понятно, спасибо...

я бы еще сделал так, если надо проверить что там ID (int значение):

Код

  $db->Exec("UPDATE Files SET file_fld_id=? WHERE usr_id=? AND file_id IN 
      (".join(',', map { $_ =~ /^\d+$/  ? $_ : () } @{&ARef($f->{file_id})}).")",$fld_id,$ses->getUserId);


или так:
(но это ни разу не использовал)
Код

  $db->Exec("UPDATE Files SET file_fld_id=? WHERE usr_id=? AND file_id IN 
      (".join(',', map { $_ ^ $_  ? () : $_ } @{&ARef($f->{file_id})}).")",$fld_id,$ses->getUserId);


Это сообщение отредактировал(а) gcc - 8.9.2010, 08:56
PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0777 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.