Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Обезопасить html


Автор: nerezus 6.1.2009, 21:28
Собственно никогда не ожидал, что задам такой тупой вопрос.

Есть html, пришедший от пользователя.
Надо добавить его на стараницу.
Как это сделать безопасно относительно CSS и проблем в верстке?

Примеры проектов, где это сделано: lj, mail.ru и т.д.

Вопрос: как?
Просьба не предлагать унылые варианты вроде "Да регекспами" или "Удали все <script> и т.д.".
Нужно нормальное решение, думаю, что некоторые с этим работали.

Пока я знаю решение(машина состояний с 2 режимами(html/css)), но не улыбает меня это руками писать.

Автор: nerezus 6.1.2009, 21:45
http://drupal.org/project/safehtml

Пока юзаю скрипт отсюда.

Автор: ksnk 6.1.2009, 21:49
Задача как-то сильно абстрактно сформулирована... smile

Может BB коды?

Можно разделить юзеров на группы с разными привилегиями.

С нулевой привилегией делать striptags на все, что не соответствует тегам U,I,B,STRONG, H1,H2,H3, BR, P, ... стили выкинуть.

Со следующими - позволять вольности со стилями (список прилагается в документации...) в тегах, но не более,...

и так далее,... суровым одминам позволять фсё...  smile 

Юзер как захочет, настолько глубоко и закопается...

Автор: nerezus 7.1.2009, 08:30
ksnk, нет, мне нужно, чтобы все пользователи могли постить html.
Надо обезопаситься от XSS.

Автор: ksnk 7.1.2009, 09:12
nerezus, Ну тогда это будет что-то большое умное и монстрообразное, на вроде этого самого safehtml. А сам он чем не устраивает? Вроде обещают какую-то особую гибкость в настройке и на первый взгляд не особенно и врут smile

Как вариант немного другого подхода - можно разбить вводимый юзером текст на элементарные блоки. Для каждого блока состряпать формочку ввода с вариантами размещения элементов.
-- заголовок- текст жестко обрезать от лишних тегов. Выравнивать по разным сторонам + размер заголовка.
-- текст + фото - текст жестко обрезать от лишних тегов, оставляя только болд-неболд++. Фотографию подпихивать справа-флот или слева флот или по центру - нефлот.
-- список ссылок - комплект ссылок по столбикам
-- табличку вставить
-- еще чего по надобности.

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

Автор: nerezus 7.1.2009, 09:24
ksnk, 
Цитата

Ну тогда это будет что-то большое умное и монстрообразное, на вроде этого самого safehtml.
 Именно так.

Цитата

А сам он чем не устраивает?
 @copyright  2004-2005, проект не поддерживается, пага не работает.

Цитата

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

Автор: ksnk 7.1.2009, 09:47
Цитата

 Вот именно, что блок один, а что внутри - зависит от юзверя

Не! не так. Нужно заставить юзера самого разбить свою одну новость на элементарные блоки. Одна новость состоит из нескольких блоков, которые размещаются друг за другом...

"Я спросил у Гугеля"..., Как правило, народ долго выспрашивает чем-же чистить от лишних тегов, ему (народу) тычут в http://ru2.php.net/tidy, мол пиши сам... а он, (народ) берет safehtml и предпочитает не парится. 

Автор: nerezus 7.1.2009, 09:55
ksnk, мы исходим из того, что среднестатистический юзверь не шарит в компьютерных делах. И это факт.

Поэтому ему дается WUSIWUG редактор и он творит, что хочет.

Автор: ksnk 7.1.2009, 12:24
Ну, интересный такой системе среднестатистический юзер, по крайней мере, не должен пугаться компьютера, Експлорера и Визивиг редактора smile Статистика получается притянутая за уши...

Не так и сложно объяснить такому среднестатистическому юзеру, что текст новости нужно разбить на логические куски... Ну а если юзер такой непонятливый, он сможет нарыть и скопипастить такой кусок разметки, что никакой safehtml не раберется. Может ну его нафиг такого непонятливого юзера - своеобразный тест на сообразительность smile

Впрочем, народ пока не бежит предлагать замену safehtml'ю, может новый год с рождеством еще справляют?


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)