Экранизация переменных
Существует ли какая нибудь интересная по Вашему мнению статейка или книжка, в которой описаны все плюсы и минусы (нюансы) определенных подходов к экранированию переменных ? Или везде суть сводится только к приведению типов, экранированию строк и т.п. ?
Буду рад любой конструктивной статье, а не статье вида:
используйте
real_escape_stringпотому что так надо
Ответы (1 шт):
Экранирование -- это изменение строки таким образом, чтобы некоторые её подстроки, имеющие специальное значение в определённом контексте, были заменены на подстроки не имеющие специального значения в этом контексте.
В разных языках программирования, языках разметки и запросов и других текстовых интерфейсах пользователь вводит строки и иногда эти строки могут иметь специальное значение. Например попробуйте рассказать мне о вопросительном знаке и показать, что есть такой символ. Если вы напишете: "Егор, есть символ ?" То я вас не пойму. Вам надо как-то обозначить, что ? это не часть вашего предложения. То же самое с языками программирования и прочими.
В мире веб-приложений чаще всего экранировать требуется кавычки, html, sql, regex-символы. В зависимости от контекста разные символы играют разное значение. В JSON-строках угловые скобочки (<>) совершенно безобидны, а в HTML это границы тега и потенциальная уязвимость. В HTML нет ничего плохого в тексте drop table, но в контексте SQL это имеет определённый смысл.
В зависимости от задачи и контекста может потребоваться экранирование разных символов и последовательностей. Для HTML -- htmlspecialchars, для подстановок в запросы к базе данных -- PDO::quote, для постановок в регулярные выражения -- preg_quote. Некоторые библиотеки и функции умеют экранировать сами. Например, вам не надо беспокоится о кавычках, при использовании json_encode, функция экранирует их сама.
Статьи из википедии, которые будут вам полезны: