Санитарная обработка пользовательских параметров MySQL

StackOverflow https://stackoverflow.com/questions/229889

  •  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 () вызывает библиотечную функцию MySQL mysql_real_escape_string , которая добавляет обратную косую черту к следующим символам: \ x00 , \ n , \ r , \ , ', " и \ x1a .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top