Санитарная обработка пользовательских параметров MySQL
-
04-07-2019 - |
Вопрос
Какие опасные символы следует заменить при вводе пользователем, когда ввод пользователя будет вставлен в запрос MySQL? Я знаю о кавычках, двойных кавычках, \ r и \ n. Есть ли другие?
(у меня нет возможности использовать умный соединитель, который принимает параметры, поэтому мне нужно построить запрос самостоятельно, и это будет реализовано на нескольких языках программирования, включая некоторые неясные, поэтому решения такие как mysql_real_escape_string
в PHP недопустимы)
Решение
mysql_real_escape_string () из документации mysql.com:
<Ч>Строка в from кодируется в экранированную строку SQL с учетом текущего набора символов соединения. Результат помещается в и добавляется завершающий нулевой байт. Кодируются следующие символы: NUL (ASCII 0), & n # 8220; \ n & # 8221 ;, & # 8220; \ r & # 8221 ;, & # 8220; \ & # 8221 ;, & # 8220; '& # 8221 ;, & # 8221 ;, & # 8220; " & # 8221; и Control-Z (см. Раздел 8.1, "Литеральные значения" # )21. (Строго говоря, 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%_" Feature AS MRES ACS 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
Другие советы
Какие языки вам нужно поддерживать? Гораздо лучше использовать встроенную очистку языка, чем писать свою собственную.
Изменить: просмотр mysql_real_escape_string
на php.net:
mysql_real_escape_string ()
вызывает библиотечную функцию MySQLmysql_real_escape_string
, которая добавляет обратную косую черту к следующим символам:\ x00
,\ n
,\ r
,\
,'
,"
и\ x1a
. р>