Раньше как-то все время динамил эту тему и не придавал должного значения безопасности сайтов. Не то, чтобы я попал в неловкую ситуацию, просто решил, что пришло время заняться этим вопросом.
Смысл весь в том, что, если у нас есть поля для заполнения пользовательскими данными, туда можно пропихнуть много лишнего. А если у нас не будет проверки входящих данных — пиши пропало. Есть несколько сложностей с обработкой textarea, таких, как:
- Все кавычки (двойные и одинарные) должны быть экранированы (защищаемся от инъекций);
- Несмотря на то, что все кавычки должны быть экранированы — нам надо иметь возможность установить классы для элементов, вписать javascript код или еще чего-нибудь с кавычками;
С первым пунктом хорошо справляется функция mysqli_real_escape_string()
Эта функция из строки
$str = "<a href="">'Ссылка'</a>";
Сделает строку
<a href=\"\">\'Ссылка\'</a>
То, что нам надо! Но тут сразу появляется проблема: при выводе этой строки, тег <a> работать не будет. Да и такой вид текста ссылки: \’Ссылка\’, тоже как-то не очень. Таким образом мы переходим к реализации второго пункта.
В PHP есть такая функция, как stripslashes(). Ее задача и заключается в том, чтобы удалять экранирующие слеши.
То есть, из строки
<a href=\"\">\'Ссылка\'</a>
Получится строка
<a href="">'Ссылка'</a>
В некоторых случаях нужно еще обработать функцией htmlspecialchars(), но не в моем.
Выше описанный способ прост, как дважды два, но иногда ответ даже на самые простые вещи не всегда легко найти.