Формы и htmlspecialchars
Формы и htmlspecialchars
Изучаю yii, дошел до вноса данных в базу и заметил, что политика Yii сводится к использованию htmlspecialchars не при вносе данных в базу, а при выводе их оттуда.
На мой взгляд это неправильно да еще и ухудшает производительность.
У кого-либо есть готовые решения, для того чтобы ко всем полям всех форм при вносе в базу (да и не только) автоматически применялся htmlspecialchars.
Вообще, интересно узнать, кто как хранит данные (с htmlspecialchars или использует htmlspecialchars при выводе только) и почему.
На мой взгляд это неправильно да еще и ухудшает производительность.
У кого-либо есть готовые решения, для того чтобы ко всем полям всех форм при вносе в базу (да и не только) автоматически применялся htmlspecialchars.
Вообще, интересно узнать, кто как хранит данные (с htmlspecialchars или использует htmlspecialchars при выводе только) и почему.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Формы и htmlspecialchars
Храню два варианта — один экранированный, другой — исходный. При выводе использую экранированный, при редактировании — исходный.
Нравится Yii? Давайте сделаем его лучше!.
Re: Формы и htmlspecialchars
Ээээ, можно конечно, но это слишком.
Почему при редактировании нельзя использовать undo_htmlspecialchars?
Почему при редактировании нельзя использовать undo_htmlspecialchars?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Формы и htmlspecialchars
Потому как не всегда дело ограничивается только htmlspecialchars. Бывает markdown, htmlpurifier и т.д.
Нравится Yii? Давайте сделаем его лучше!.
Re: Формы и htmlspecialchars
Можно использовать beforeSave в модели)
Но по моему htmlspecialchars не всегда допустимо использовать перед записью в БД ибо например JS редакторы выдают текст с html. Кроме того в БД html код никакой опасности не представляет, для фильтрации опасных символов есть mysql_real_escape_string. Если нужно отфильтровать что то, лучше использовать фильтрацию по тегам, вырезая опасные(или все кроме допустимых).
Но по моему htmlspecialchars не всегда допустимо использовать перед записью в БД ибо например JS редакторы выдают текст с html. Кроме того в БД html код никакой опасности не представляет, для фильтрации опасных символов есть mysql_real_escape_string. Если нужно отфильтровать что то, лучше использовать фильтрацию по тегам, вырезая опасные(или все кроме допустимых).
Re: Формы и htmlspecialchars
Это я понимаю, не понимаю я только, зачем почем зря нагружать базу, если проще сделать undo, а потом все нужное.Потому как не всегда дело ограничивается только htmlspecialchars. Бывает markdown, htmlpurifier и т.д.
Ну это для каждой модели писать надо. А если их чуть более чем до фига?Можно использовать beforeSave в модели)
Это да, но тут уж пусть решает тот, кто пишет приложение.Но по моему htmlspecialchars не всегда допустимо использовать перед записью в БД ибо например JS редакторы выдают текст с html.
Это другое совсем.Кроме того в БД html код никакой опасности не представляет, для фильтрации опасных символов есть mysql_real_escape_string.
Здесь не только в безопасности дело, но и просто в выводе. Ведь когда информация выводится, она в любом случае должна быть обработана htmlspecialchars.Если нужно отфильтровать что то, лучше использовать фильтрацию по тегам, вырезая опасные(или все кроме допустимых).
Вывод осуществляется намного чаще, чем ввод.
Отсюда собственно и возникла тема - зачем обработку делать по 10 раз, если можно сделать лишь один и дальше не суетиться.
Re: Формы и htmlspecialchars
Наследуемся от CActiveRecord и определяем свой класс в компонентах, после чего все модели наследуем от него.Nafania писал(а):Ну это для каждой модели писать надо. А если их чуть более чем до фига?Можно использовать beforeSave в модели)
Ну тут уже сказали. При выводе не в любом случае нужно прогонять через htmlspecialchars ибо можно при вводе отфильтровать данные по своему и при выводе получать уже готовые к показу данные. Как я понимаю на это и рассчитывали создатели фреймворка. Если бы проверка была принудительной то WISWIG редакторы было бы использовать невозможно без костылей.Nafania писал(а):Здесь не только в безопасности дело, но и просто в выводе. Ведь когда информация выводится, она в любом случае должна быть обработана htmlspecialchars.Если нужно отфильтровать что то, лучше использовать фильтрацию по тегам, вырезая опасные(или все кроме допустимых).
Вывод осуществляется намного чаще, чем ввод.
Отсюда собственно и возникла тема - зачем обработку делать по 10 раз, если можно сделать лишь один и дальше не суетиться.
Re: Формы и htmlspecialchars
Любой мало-мальски нормальный текст содержит кавычки, которые вам вывести as is нельзя.При выводе не в любом случае нужно прогонять через htmlspecialchars ибо можно при вводе отфильтровать данные по своему и при выводе получать уже готовые к показу данные.
Так это уже редактирование, которое не совсем вывод. Об этом я писал выше.Если бы проверка была принудительной то WISWIG редакторы было бы использовать невозможно без костылей.
Так делать и буду, но все же хотелось бы видеть возможность из коробки.Наследуемся от CActiveRecord и определяем свой класс в компонентах, после чего все модели наследуем от него.
Re: Формы и htmlspecialchars
Только фильтрует их не htmlspecialchars.Любой мало-мальски нормальный текст содержит кавычки, которые вам вывести as is нельзя.
Вы меня не поняли. Если мы текст из редактора прогоним через htmlspecialchars то мы и при выводе получим выовд кода html ибо символы будут преобразованы. Конечно это вопрос к построителям системы, но большей части программистов было удобнее так.Так это уже редактирование, которое не совсем вывод. Об этом я писал выше.
Тут дело в том что это фреймворк. А он не должен навязывать чего либо не критичного в плане безопасности. Тоесть если можно обойтись без этого - лучше обойтись и оставить на самостоятельную реализацию тем единицам кому будет нужно. Прикрутить какие то действия намного проще чем отключить их. Я не видел ни одного фреймворка(Yii, Zend я разбирал довольно подробно) где из коробки был прогон через функции как то фильтрующие теги. Не нужно это большей части пользователей.Так делать и буду, но все же хотелось бы видеть возможность из коробки.
Re: Формы и htmlspecialchars
Тут немного мы сторону ушли.
Речь, как я повторюсь, не в безопасности, хотя это тоже играет роль, а в производительности.
Фреймворк как раз навязывает модель использования htmlspecialchars, только при выводе, а не при вводе - о чем я изначально и поднял тему.
Фреймворк борется с последствиями, а не с источником.
Большинство функций вывода данных в фреймворке используют htmlspecialhars.
Представьте, что на странице выводится список чего-либо, предположим список состоит из 100 элементов.
Каждую строку при выводе надо обработать на предмет тех же кавычек. 100 вызовов. На один хит. А если хитов тысяча?
В случае же того, как говорю я, обработка была бы единожды выполнена, и пусть там хоть 100k хитов - обрабатывать уже не надо.
Вот о чем речь.
Речь, как я повторюсь, не в безопасности, хотя это тоже играет роль, а в производительности.
Фреймворк как раз навязывает модель использования htmlspecialchars, только при выводе, а не при вводе - о чем я изначально и поднял тему.
Фреймворк борется с последствиями, а не с источником.
Большинство функций вывода данных в фреймворке используют htmlspecialhars.
Представьте, что на странице выводится список чего-либо, предположим список состоит из 100 элементов.
Каждую строку при выводе надо обработать на предмет тех же кавычек. 100 вызовов. На один хит. А если хитов тысяча?
В случае же того, как говорю я, обработка была бы единожды выполнена, и пусть там хоть 100k хитов - обрабатывать уже не надо.
Вот о чем речь.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Формы и htmlspecialchars
Да нет, вроде не навязывает. Я при вводе использую, кто-то при выводе.
Нравится Yii? Давайте сделаем его лучше!.
Re: Формы и htmlspecialchars
Ну я не настолько глубоко знаком с yii как вы, но вот например, базовые вещи - breadcrumbs - использует по умолчанию.
CGridView - использует по умолчанию, CHtml::link - обязует использовать, если не теги ну итд.
Это навскидку, то с чем я столкнулся в последнее время.
Но, вообщем, я понял, что большинство предпочитает использовать html теги в контенте. Я же обычно использую всякие бибикод аналоги, ибо делаю сайты, где контент обычно юзеры делают, поэтому предпочитаю, от греха подальше, не давать возможность использовать html теги.
Возможно моя стратегия в данном плане неправильна.
CGridView - использует по умолчанию, CHtml::link - обязует использовать, если не теги ну итд.
Это навскидку, то с чем я столкнулся в последнее время.
Но, вообщем, я понял, что большинство предпочитает использовать html теги в контенте. Я же обычно использую всякие бибикод аналоги, ибо делаю сайты, где контент обычно юзеры делают, поэтому предпочитаю, от греха подальше, не давать возможность использовать html теги.
Возможно моя стратегия в данном плане неправильна.
Re: Формы и htmlspecialchars
Не замечал навязывания. Вообще при выводе лишь в некоторых местах CHtml используется htmlspecialchars. Фреймворк позволяет тебе самому выбирать где делать фильтрацию.Фреймворк как раз навязывает модель использования htmlspecialchars, только при выводе, а не при вводе - о чем я изначально и поднял тему.
Фреймворк борется с последствиями, а не с источником.
Функции для работы с БД не используют htmlspecialchrs. Откуда информация?.. Сейчас пробежался поиском - функция используется только в фильтрах и в классе CHtml где большинство функций?..Большинство функций вывода данных в фреймворке используют htmlspecialhars.
Сейчас нет принудительной фильтрации при выводе. Нет. Только в виджетах, и то опционально.Представьте, что на странице выводится список чего-либо, предположим список состоит из 100 элементов.
Каждую строку при выводе надо обработать на предмет тех же кавычек. 100 вызовов. На один хит. А если хитов тысяча?
В случае же того, как говорю я, обработка была бы единожды выполнена, и пусть там хоть 100k хитов - обрабатывать уже не надо.
Вот о чем речь.
Представьте другую ситуацию - на странице есть текстовый редактор который сохраняет в базу текст с html который не нужно фильтровать. А при фильтрации из коробки, о которой администратор не знал прикручивая редактор, он отфильтруется и на выходе мы получим набор символов а не наш форматированный текст. Поэтому я и говорю что то что есть сейчас в Yii - оптимальный вариант. Пользователь сам может выбрать когда и как фильтровать. Я не против вашего метода, я клоню к тому что из коробки он не нужен.
Нет, почему, тут дело в другом) Просто вы упомянули что нужно сделать возможность принудительной фильтрации изкаробки, а это будет уже навязываение) В остальном же как кому удобнее)Возможно моя стратегия в данном плане неправильна
Re: Формы и htmlspecialchars
Да, в основном в виджетах, но там везде по умолчанию включен htmlspecialchars, что говорит о стратегии разработчиков.
Не принудительной, это было бы глупо, а чтобы была возможность простого включения-выключения.
Не принудительной, это было бы глупо, а чтобы была возможность простого включения-выключения.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Формы и htmlspecialchars
CHtml::link ничего не энкодит вроде… В остальных немногих местах есть возможность отключить.
Нравится Yii? Давайте сделаем его лучше!.