Как стать автором
Обновить

Комментарии 26

не знаю как и благодарить. все просто, ясно и понятно
теперь бы не забыть когда писать буду
ну, еще есть вариант — смотреть по чему щелкаешь и по каким ссылкам переходишь.
если ссылка отправлена пользователем, а не является частью сайта — это предмет для внимательного рассмотрения.

щелкаем правой кнопкой на ссылку, говорим «копировать ссылку», открываем новую вкладку браузера, вставляем туда адрес ссылки и читаем что там написано.

это, конечно, оффтопик, но всё же. спасение утопающих — иногда всё же является делом самих утопающих.
Золотое правило работы с данными — хранить пользовательский ввод в базе именно в том виде, в котором он был отправлен. Поэтому, всю фильтрацию следует производить на этапе вывода пользовательских данных на страницу.

Может это и золотое правило, но на самом деле имхо это глупость. Вредоносный код надо удалять сразу и брать на заметку, что такой-то пользователь пытался нам навредить.

Новое золотое: Фильтрацию от вредного кода нужно производить до ввода
тобишь:

Новое золотое правило: Фильтрацию от вредного кода нужно производить до записи в базу
Это правило вытекает из того, что невозможно однозначно судить, вредоносный код это или нет. Например, код может быть просто нежелательный для одной роли, и разрешенный для другой.
Очень разумное замечание. Не подумал.
Вторая причина — возможность модификации данных между моментом загрузки их из базы и выводом на страницу. Упрощенно, отображение ноды выглядит так:
1. Загрузить ноду и бд.
2. Позволить другим модулям пофлиять на объект ноды.
3. Вывести ноду на экран.

Если вы в прошлый раз перед сохранением этой ноды уже отфильтровали ее контент, то никто не может гарантировать, что какой-то модуль перетрет ее контент на втором шаге так, что вылезет XSS.
Фильтрацию от вредного кода нужно производить путем элиминации носителей вредного кода :)
Золотое правило работы с данными — хранить пользовательский ввод в базе именно в том виде, в котором он был отправлен. Поэтому, всю фильтрацию следует производить на этапе вывода пользовательских данных на страницу.


Я с Друпалом не знаком, но возникает вопрос — а не слишком ли накладно фильтровать данные каждый раз при выводе? Не будет ли это грузить сервер при большой частоте посещений?

Прошу меня извинить, если я чего-то неправильно понял.
Так и есть поэтому тут дело такое, у каждого свой подход, я фильтрую сразу так проще и удобнее и отпадает бесполезная постоянная фильтрация при выводе.
Чуть выше ответил.
Пока вы будете фильтровать на выходе XSS, получите SQL injection на входе.
Можно кешировать готовые обработанные данные, это не проблема.

Но, имхо, все-таки из-за такой универсальности друпал и страдает не очень высокой производительностью
Да, именно отфильтрованный контент и лежит в кеше, поэтому тяжелые фильтрации выполняются минимум раз. Все остальное — необходимое зло.
НЛО прилетело и опубликовало эту надпись здесь
… и либо замедляет выдачу — при выполнении на сервере, либо сужает круг допустимых браузеров — при выполнении на клиенте.
НЛО прилетело и опубликовало эту надпись здесь
Кэширование, кластеры… Это не панацея для всех применений.
Ребят, неужели не запомнить?
— Всё что кладешь в БД обрабатывай mysql_real_escape_string (для MySQL)
— Всё что получил от третьего лица, и хочешь вывести, обрабатывай htmlspecialchars при выводе

Неужели ради этого пишутся такие длинные статьи?
вам конечно просто и понятно, а вот лично мне было интересно почитать к чему может привести та или иная оплошность
И как вы собираетесь отфильтровать таким способом текст с html разметкой?
Мне кажется, у Вовы и без всякого кросс-сайт скриптинга есть доступ к базам ФСБ ;-)
Это ж сколько старого кода теперь перелопатить надо? :)
Но, спасибо!
терзают меня смутные сомнения, что я знаю какая сука минусует.
уважаемый, мы с вами и вашими шестерками давно разобрались.
Использование t() и l() — это вообще must-use функции для вывода любых текста и ссылок. Они еще и от возможных проблем с кодировками избавляют, а уж если сайт в потенциале может быть локализован на другие языки, то их отсутствие может обернуться +NN тыщ человеко-часов… проверено на личном опыте, так сказать :)
Користуюся htmlpurifier.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории