Комментарии 26
не знаю как и благодарить. все просто, ясно и понятно
теперь бы не забыть когда писать буду
теперь бы не забыть когда писать буду
ну, еще есть вариант — смотреть по чему щелкаешь и по каким ссылкам переходишь.
если ссылка отправлена пользователем, а не является частью сайта — это предмет для внимательного рассмотрения.
щелкаем правой кнопкой на ссылку, говорим «копировать ссылку», открываем новую вкладку браузера, вставляем туда адрес ссылки и читаем что там написано.
это, конечно, оффтопик, но всё же. спасение утопающих — иногда всё же является делом самих утопающих.
если ссылка отправлена пользователем, а не является частью сайта — это предмет для внимательного рассмотрения.
щелкаем правой кнопкой на ссылку, говорим «копировать ссылку», открываем новую вкладку браузера, вставляем туда адрес ссылки и читаем что там написано.
это, конечно, оффтопик, но всё же. спасение утопающих — иногда всё же является делом самих утопающих.
Золотое правило работы с данными — хранить пользовательский ввод в базе именно в том виде, в котором он был отправлен. Поэтому, всю фильтрацию следует производить на этапе вывода пользовательских данных на страницу.
Может это и золотое правило, но на самом деле имхо это глупость. Вредоносный код надо удалять сразу и брать на заметку, что такой-то пользователь пытался нам навредить.
Новое золотое: Фильтрацию от вредного кода нужно производить до ввода
тобишь:
Новое золотое правило: Фильтрацию от вредного кода нужно производить до записи в базу
Новое золотое правило: Фильтрацию от вредного кода нужно производить до записи в базу
Это правило вытекает из того, что невозможно однозначно судить, вредоносный код это или нет. Например, код может быть просто нежелательный для одной роли, и разрешенный для другой.
Вторая причина — возможность модификации данных между моментом загрузки их из базы и выводом на страницу. Упрощенно, отображение ноды выглядит так:
1. Загрузить ноду и бд.
2. Позволить другим модулям пофлиять на объект ноды.
3. Вывести ноду на экран.
Если вы в прошлый раз перед сохранением этой ноды уже отфильтровали ее контент, то никто не может гарантировать, что какой-то модуль перетрет ее контент на втором шаге так, что вылезет XSS.
1. Загрузить ноду и бд.
2. Позволить другим модулям пофлиять на объект ноды.
3. Вывести ноду на экран.
Если вы в прошлый раз перед сохранением этой ноды уже отфильтровали ее контент, то никто не может гарантировать, что какой-то модуль перетрет ее контент на втором шаге так, что вылезет XSS.
Фильтрацию от вредного кода нужно производить путем элиминации носителей вредного кода :)
Золотое правило работы с данными — хранить пользовательский ввод в базе именно в том виде, в котором он был отправлен. Поэтому, всю фильтрацию следует производить на этапе вывода пользовательских данных на страницу.
Я с Друпалом не знаком, но возникает вопрос — а не слишком ли накладно фильтровать данные каждый раз при выводе? Не будет ли это грузить сервер при большой частоте посещений?
Прошу меня извинить, если я чего-то неправильно понял.
Так и есть поэтому тут дело такое, у каждого свой подход, я фильтрую сразу так проще и удобнее и отпадает бесполезная постоянная фильтрация при выводе.
Можно кешировать готовые обработанные данные, это не проблема.
Но, имхо, все-таки из-за такой универсальности друпал и страдает не очень высокой производительностью
Но, имхо, все-таки из-за такой универсальности друпал и страдает не очень высокой производительностью
НЛО прилетело и опубликовало эту надпись здесь
Ребят, неужели не запомнить?
— Всё что кладешь в БД обрабатывай mysql_real_escape_string (для MySQL)
— Всё что получил от третьего лица, и хочешь вывести, обрабатывай htmlspecialchars при выводе
Неужели ради этого пишутся такие длинные статьи?
— Всё что кладешь в БД обрабатывай mysql_real_escape_string (для MySQL)
— Всё что получил от третьего лица, и хочешь вывести, обрабатывай htmlspecialchars при выводе
Неужели ради этого пишутся такие длинные статьи?
Мне кажется, у Вовы и без всякого кросс-сайт скриптинга есть доступ к базам ФСБ ;-)
Это ж сколько старого кода теперь перелопатить надо? :)
Но, спасибо!
Но, спасибо!
Использование t() и l() — это вообще must-use функции для вывода любых текста и ссылок. Они еще и от возможных проблем с кодировками избавляют, а уж если сайт в потенциале может быть локализован на другие языки, то их отсутствие может обернуться +NN тыщ человеко-часов… проверено на личном опыте, так сказать :)
Користуюся htmlpurifier.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Безопасный код: Работа с пользовательским вводом