Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=8399642&src=arc&showlite=l
Дата изменения: Unknown
Дата индексирования: Tue Feb 26 22:40:50 2013
Кодировка: Windows-1251
[closed] Валидация ввода пользователя для предотвращения SQL-инъекций - Public forum of MSU united student networks
Technical >> Development (Archive)

Страницы: 0 | (10) | 20 | показать все
Eau : Re: Валидация ввода пользователя для предотвращения SQL-инъекций  [re:FMX]   28.02.2009 06:32    | Reply | Edit |
18
Тогда ОК!
Если особый случай, то, наверное, можно оставить его открытым для инъекций!

psa   [re:FMX]   28.02.2009 09:01    | Reply | Edit |
3
Quote:

Интересуют алгоритмы



http://blog.moertel.com/articles/2006/10/18/a-type-based-sol...
труъ шняга, правда, для типизованных языков :(

Sevurrrra   [re:FMX]   28.02.2009 10:58    | Reply | Edit |
1
Проэкранируй все одинарные кавычки. Будет тебе счастье.

nelapsi   [re:Sevurrrra]   28.02.2009 14:21    | Reply | Edit |
1
они вроде не экранируются, а на '' (две одинарных кавычки) заменяются

blind   [re:FMX]   01.03.2009 11:47    | Reply | Edit |
3
нахрена? встроенные средства dbapi прекрасно все реализуют без дырявых велосипедов в духе пхп

_Seti   [re:FMX]   02.03.2009 00:57    | Reply | Edit |
0
В SQLIte вроде бы нужно экранировать только одинарные кавычки. Вот так, например (код для дельфи)

code:
SQLText := Format('SELECT * FROM table WHERE field = "%s"', [ StringReplace(UserFieldValue, '''', '''''', [rfReplaceAll])]);


Druxa   [re:Minotaurus]   07.03.2009 10:43    | Reply | Edit |
-4
> Такой способ теоретически является более правильным
в теории все так, но в жизни бывает, что от пользовательских данных зависит например имя таблицы, в которую задается запрос или какие поля выбираются. так что ничего не поделаешь, приходится строить запрос на лету, и нужна функция, которая будет проверять вводимые данные на инъекции. и вряд ли такая функция будет в стандартной библиотеке, потому что способ проверки необычный, например
code:
$table =~ /`/ and die; $dbh->do("insert `$table` ...");


alepar   [re:Druxa]   07.03.2009 10:57    | Reply | Edit |
6
Quote:

так что ничего не поделаешь, приходится строить запрос на лету



имена таблиц и имена колонок надо брать не из юзеринпута, а из своих внутренних мапов
после этого ты строишь запрос с вопросиками, и все как обычно
не надо тут панику разводить

Druxa   [re:alepar]   07.03.2009 12:34    | Reply | Edit |
-6
> имена колонок надо брать не из юзеринпута, а из своих внутренних мапов
а потом когда в таблице добавляется колонка, надо идти искать разработчика, чтобы он ее в этот свой внутренний мап добавил, пересобрал программу, поставил в тестинг, подождал денек, потом выкатил, в чем смысл :-\ неужели так сложно написать проверку, что имя колонки состоит только из букв цифр и подчерка...
зато теоретически все правильно!

krendel   [re:Druxa]   07.03.2009 12:38    | Reply | Edit |
1
В ответ на:

а потом когда в таблице добавляется колонка




а что - колонки свтой дух что-ли добавляет?

если меняется БД, то вполне логично, что разработчик должен потом поучаствовать.
или инженер БД будет отвечать за появившиеся баги?

DarkGray   [re:Druxa]   07.03.2009 13:19    | Reply | Edit |
3
Quote:

неужели так сложно написать проверку, что имя колонки состоит только из букв цифр и подчерка...




приведи, пожалуйста, реальный use case, когда имя колонки или таблицы вводится пользователем

ps
чтобы выбирался я еще могу придумать, но тогда как раз на сервере строится map, а пользователю передаются какие-то идентификаторы из map-а, а не реальные имена колонок/таблиц.

comcon1   [re:DarkGray]   07.03.2009 15:26    | Reply | Edit |
0
Да "вводится" - это черезчур)

_vj_   [re:DarkGray]   07.03.2009 15:56    | Reply | Edit |
-1
Quote:

приведи, пожалуйста, реальный use case, когда имя колонки или таблицы вводится пользователем



когда ты хочешь оставить пользователю возможность вводить запросы руками, а ограничивать его встроенным генератором

alepar   [re:Druxa]   07.03.2009 17:42    | Reply | Edit |
2
Так а смысл защищаться тогда от sql-инъекций, если ты пользователю и так позволяешь из произвольной таблицы заселектить произвольную колонку?
Не хочется искать программиста - открываешь БД на чтение\запись всем, и вперед...

Top