Санитарная обработка пользовательских параметров MySQL - PullRequest
4 голосов
/ 23 октября 2008

Какие опасные символы следует заменить при вводе пользователя, когда ввод пользователя будет вставлен в запрос MySQL? Я знаю о кавычках, двойных кавычках, \ r и \ n. Есть ли другие?
(у меня нет возможности использовать умный соединитель, который принимает параметры, поэтому мне нужно построить запрос самостоятельно, и это будет реализовано на нескольких языках программирования, включая некоторые неясные, поэтому решения такие как mysql_real_escape_string в PHP недопустимы)

Ответы [ 2 ]

7 голосов
/ 23 октября 2008

mysql_real_escape_string () из документов mysql.com:

Строка в from кодируется в экранированную строку SQL с учетом текущего набора символов соединения. Результат помещается в и добавляется завершающий нулевой байт. Кодируются следующие символы: NUL (ASCII 0), «\ n», «\ r», «\», «'», «» »и Control-Z (см. Раздел 8.1« Литеральные значения »). (Строго говоря, MySQL требует только экранирования обратной косой черты и символа кавычек, используемых для цитирования строки в запросе. Эта функция заключает в кавычки другие символы, чтобы их было легче читать в файлах журналов.)


mysql_real_escape_string () осведомлен о наборе символов, поэтому репликация всех его способностей (особенно в отношении проблем многобайтовой атаки) - это не маленький объем работы.

С http://cognifty.com/blog.entry/id=6/addslashes_dont_call_it_a_comeback.html:

AS = addslashes()  
MRES = mysql_real_escape_string()
ACS = addcslashes() //called with "\\\000\n\r'\"\032%_"

<strong>Feature                                         AS     MRES    ACS</strong>
escapes quote, double quote, and backslash      yes    yes     yes
escapes LIKE modifiers: underscore, percent     no     no      yes
escapes with single quotes instead of backslash no     yes*1   no
character-set aware                             no     yes*2   no
prevents multi-byte attacks                     no     yes*3   no

4 голосов
/ 23 октября 2008

Какие языки вам нужно поддерживать? Гораздо лучше использовать встроенную очистку языка, чем писать свою собственную.

Редактировать: Глядя на mysql_real_escape_string на php.net:

mysql_real_escape_string() вызывает библиотечную функцию MySQL mysql_real_escape_string, которая добавляет обратный слэш к следующим символам: \x00, \n, \r, \, ', " и \x1a.

...