Вот веская причина, в основном в ответ на ваш собственный опубликованный ответ: использование htmlspecialchars()
или htmlentities()
делает не делает ваш SQL-запрос безопасным . Вот для чего mysql_real_escape_string () .
Похоже, вы предполагаете, что проблема заключается только в одинарных и двойных кавычках. Запросы MySQL фактически уязвимы для символов \x00
, \n
, \r
, \
, '
, "
и \x1a
в ваших данных. Если вы не используете подготовленные операторы или mysql_real_escape_string()
, значит, у вас есть уязвимость внедрения SQL.
htmlspecialchars()
и htmlentities()
не преобразуют все эти символы, поэтому вы не можете сделать ваш запрос безопасным, используя эти функции. С этой целью addslashes()
также не делает ваш запрос безопасным!
Другие меньшие недостатки включают в себя то, что другие авторы уже упоминали о MySQL, который не всегда используется для веб-контента, а также тот факт, что вы увеличиваете объем хранилища и индексное пространство, необходимое для ваших данных. (рассмотрите один байт памяти для символа кавычки, по сравнению с шестью или более байтами памяти для его формы сущности).