Экранизация переменных

Существует ли какая нибудь интересная по Вашему мнению статейка или книжка, в которой описаны все плюсы и минусы (нюансы) определенных подходов к экранированию переменных ? Или везде суть сводится только к приведению типов, экранированию строк и т.п. ?

Буду рад любой конструктивной статье, а не статье вида:

используйте real_escape_string потому что так надо


Ответы (1 шт):

Автор решения: Егор Банин

Экранирование -- это изменение строки таким образом, чтобы некоторые её подстроки, имеющие специальное значение в определённом контексте, были заменены на подстроки не имеющие специального значения в этом контексте.

В разных языках программирования, языках разметки и запросов и других текстовых интерфейсах пользователь вводит строки и иногда эти строки могут иметь специальное значение. Например попробуйте рассказать мне о вопросительном знаке и показать, что есть такой символ. Если вы напишете: "Егор, есть символ ?" То я вас не пойму. Вам надо как-то обозначить, что ? это не часть вашего предложения. То же самое с языками программирования и прочими.

В мире веб-приложений чаще всего экранировать требуется кавычки, html, sql, regex-символы. В зависимости от контекста разные символы играют разное значение. В JSON-строках угловые скобочки (<>) совершенно безобидны, а в HTML это границы тега и потенциальная уязвимость. В HTML нет ничего плохого в тексте drop table, но в контексте SQL это имеет определённый смысл.

В зависимости от задачи и контекста может потребоваться экранирование разных символов и последовательностей. Для HTML -- htmlspecialchars, для подстановок в запросы к базе данных -- PDO::quote, для постановок в регулярные выражения -- preg_quote. Некоторые библиотеки и функции умеют экранировать сами. Например, вам не надо беспокоится о кавычках, при использовании json_encode, функция экранирует их сама.

Статьи из википедии, которые будут вам полезны:

→ Ссылка