![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Innuendo108 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
Стоит задача дать возможность пользователям сами создавать/редактировать контент на сайте (статьи, новости и т.д.)
Сначала была простая идея - сделать простейший редактор составления контента (к примеру BB-код), хранить контент в базе в этом самом BB-коде, а при отображении - парсить в HTML. Но возникло требование - дать пользователям wysiwyg редактор (контингент пользователей - люди, далекие от компьютеров, сложнее MS Word'а ничего не видали). Вот и вопрос - как грамотно и безопасно это реализовать? Пользователь в wysiwyg-редактор сразу видит форматированный текст, но "выход" редактора это HTML-код. Пусть на панельке редакторе я выставлю только те кнопки, что мне нужно (конкретные цвета, конкретные шрифты, запрет на изображения и т.д.), но злоумышленник сможет вбить туда любой html-код через firebug. Как проверять содержимое контента при сохранении тогда? Нужно иметь фильтр разрешенных html-тегов, как-то так? И если я буду хранить контент в базе в html-виде, то отображать надо будет простым "echo" (без защит типа htmlspecialcharacters) - т.е. если злоумышленнику удасться внедрить "плохой" html, то оно отобразится. Посоветуйте варианты - как хранить контент, и как на обоих стадиях фильтровать (на стадии сохранения, и на стадии отображения). P.S. Это вопрос не по php конкретно, но общего раздела web-разработки нет. Я посчитал что ближе это всё-таки к серверной части, а так как меня интересует php-реализация, то постю сюда. Заранее спасибо за ответы. |
|||
|
||||
Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: 13 Всего: 78 |
Один из вариантов - парсить текст перед сохранением на разрешенные теги.
Добавлено через 34 секунды Да и как с помощью HTML что-то злостное написать? -------------------- Ll 2 |
|||
|
||||
mark2011 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 28.6.2011 Репутация: 2 Всего: 2 |
Innuendo108,
У меня написана система создания и редактирования страниц с использованием редактора WYSIWYG. Если вы беспокоитесь только за то, что в финальном html могут попасть запрещённые теги html, используйте функцию php strip_tags со вторым параметром. Напомню её соответствующее определение:
Указав в качестве второго параметра те теги, которые необходимо оставить в тексте, вы достигнете своей цели. Как хранить? В базе, обыкновенно. Фильтровать перед помещением в базу. |
|||
|
||||
Innuendo108 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
Guedda,
ну как запрещенного.... ну если не учитывать внедрения <script> тегов, то вообще цель - запретить использовать нестандартное форматирование контента. (Вот есть стандарт - 3 цвета, 2 шрифта, 3 размера и 1 изображение) и всё - ничего другого нельзя. mark2011, Спасибо за подсказку интересной функции - strip_tags , не знал, то что нужно. А как можно атрибуты в тегах запрещать? Это сообщение отредактировал(а) Innuendo108 - 8.7.2011, 19:59 |
|||
|
||||
mark2011 |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 28.6.2011 Репутация: 2 Всего: 2 |
Innuendo108,
А зачем вам запрещать атрибуты? Если тег запрещён, то он запрещён, тут никакие атрибуты не будут действовать. Если тег разрешён, значит разрешены любые его атрибуты. Если уж так нужно, попробуйте поиграться с регулярками в php на эту тему, но имхо кода больше будет, чем реальной пользы ))) |
|||
|
||||
Innuendo108 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 3.4.2008 Репутация: нет Всего: 2 |
mark2011,
Просто чего я могу добиться запретом одних тегов? Да, <script>, <iframe> теги запрещу, запрещу картинки. Но css же всемогуч - пользователь сможет что угодно написать в атрибуте style, и я получу любое форматирование а так же и картинку (которые, к примеру, запрещены). Главное что через css можно делать аболютные дивы, которые будут налазить на шапку сайта, или подменять меню сайта и т.д. и т.п. Вообще страшная вещь =) При том, wysiwyg редактор (я долго выбирал, не помню на каком я сейчас остановился) возможно как раз через style атрибут и задаёт стиль всем элементам. И как тогда быть с атрибутом style? Регуляркой обходить и блочить всякие position:absolute, background[-image] : url() и т.д. |
|||
|
||||
ivashka |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 6.6.2006 Репутация: нет Всего: нет |
Да действительно если уж сильно беспокоится, то надо и некоторые возможности css обрезать.
Но главное это отрубить ява-скрипты. Я перепробовал целую кучу визуальных редакторов, но самый удобный и для пользователя и для разработчика TinyMce, для него еще есть отличный менеджер файлов. |
|||
|
||||
mark2011 |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 28.6.2011 Репутация: 2 Всего: 2 |
Innuendo108,
А собственно что? CSS - это
и
Ну так запретите эти теги при помощи упомянутой выше функции strip_tags и всё как бы.... т.е. ситуация такая, вы парсите текст из редактора, если находятся эти теги, то они обрежутся. Ну что ж, если пользователь там что-то написал из CSS, то оно будет бесполезно. По крайней мере не выполнится - это уж точно ![]() |
||||
|
|||||
systemIV |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 28.3.2011 Репутация: -1 Всего: -1 |
Не знаю писали или нет, не читал. Напиши функцию которая заменяет символы <, >, /, ? и т.д. на их численные коды.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |