За последние 24 часа нас посетили 23523 программиста и 1723 робота. Сейчас ищут 784 программиста ...

Список безопасных тэгов HTML (для вставки таблиц юзерами)

Тема в разделе "PHP для новичков", создана пользователем V0VAN, 17 апр 2011.

  1. V0VAN

    V0VAN Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    24
    Симпатии:
    0
    Доброго времени суток!

    Я хочу дать возможность пользователям вставлять HTML, чтобы было удобнее, например, вставлять таблицы.
    Вставлять HTML - опасно.
    1) Понятно, можно создать список надёжных юзеров. НО! Модерировать каждую статью мало желания.
    2) устанавливать TinyMCE в PHP-Fusion-7 нет желания, так как это мне сложно.

    Мне хочется найти готовую функцию для проверки HTML на безопасность и закрытость.
    Я так понимаю, надо проверять на отсутствие <script, onmouseover, onmousedown и закрытость всех </td> </tr> </table>.

    Не подскажете готовые или почти готовые варианты?


    как-то же проверяется HTML во всяких блогах, где можно вставлять HTML...
     
  2. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    HTML:
    1. <b onclick="alert(document.cookie)">
    и вообще надо проверять что тег зкрыт.
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Есть хороший редактор CKEditor, он ведь у тебя нет желания.
     
  5. V0VAN

    V0VAN Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    24
    Симпатии:
    0
    это ж не для удобства юзеров, это защита от недоброжелатей.

    про BB-коды забудьте - охота копировать HTML из FrontPage.

    Я так подумал, что даже если кто-то забудет скопировать </td></tr></table>, сайту это не навредит, просто вёрстка слезет. Это мелочи.

    У меня друг приделал полноценный редактор TinyMCE в PHP-Fusion (с полноценной загрузкой картинок!), в том числе в форум PHP-Fusion.
    Чудо программисткой мысли от Alipapa - редактор TinyMCE в форуме PHP-Fusion http://electric-forum.ru/ . Лично я в восторге.

    Но я искал вариант проще, например, на базе функции str_replace .
    Типа просто позаменять опасные тэги и слова.
    Список опасных слов не подскажете?
    onclick
    onmousedown
    onmouseover
    onmouseout
    ondoubleclick
    script
    iframe
    frame

    что ещё ?
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А это разве нормально? Например <h1> не закрытый. Или <textarea>.
    А еще пишем
    PHP:
    1. <form method=POST action=http://mysite.ru/>
    и следующие комментарии будут отправляться на мой сайт, уводя посетителей с вашего.
     
  8. V0VAN

    V0VAN Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    24
    Симпатии:
    0
    [vs], не отвлекайте меня с пути истинного.
    Если чел. добавит страницу со слезшей вёрсткой, сайт не ляжет.
    Когда я замечу, я или поправлю, или удалю.

    ещё
    form
     
  9. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    V0VAN
    истинный путь - запретить все теги, кроме разрешенных. Составить список минимально необходимых проще.
     
  10. V0VAN

    V0VAN Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    24
    Симпатии:
    0
    ну и как это сделать?
    я так понимаю, это сложный путь.
    надо искать конечный > у каждого тэга, а потом ещё закрывающий тэг.

    разве просто поудалять некоторые слова не проще?
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    неа
    PHP:
    1. <?php
    2. $str = '<form><script><b><u><h1>Preved';
    3. $str = strip_tags($str, '<b><u>');
    4. echo $str;
    далее, чтобы закрывать теги - можно просто после сообщения пользователя вставлять закрывающие теги всех разрешенных.
    PHP:
    1. <?php
    2. $str .= '</b></u></i>';
     
  12. V0VAN

    V0VAN Активный пользователь

    С нами с:
    30 янв 2009
    Сообщения:
    24
    Симпатии:
    0
    О!
    это как раз то, что я искал!
    благодарю!

    Код (Text):
    1. $str = strip_tags($str, '<table></table><tr></tr><td></td><b></b>');
    чистит все остальные тэги, например <font color="green">12348</font>
    и оставляет конструкции типа <table align="center" width="80%" border="1" cellpadding="3" cellspacing="0" bordercolordark="white" bordercolorlight="black"> - это как раз то, что нужно!

    но оставляет конструкциии типа <b onmousedown="" onclick="">warning</b></td>

    а эти слова (onmousedown, onclick) - через str_replace ?
     
  13. NR55RU

    NR55RU Активный пользователь

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    в данном случае на мой взгляд эффективнее и просто безопаснее с помощью регулярных выражений.
    Слегка повозиться с функцией которая будет заниматься этим вопросом в итоге получим
    1. Удаление любых параметров тегов и не важно что там будут писать.
    2. Проверка закрытых тегов и даже при желание можно их закрывать.
    3. Быстрая адаптация под найденные дырки, за чем штатные функции ПХП просто не успеют.
    4. При желании ведение лога запрещенных вещей кто и чего пытался всунуть на сайт, выявление потенциальных ...
    4. Ну и как бонус готовая функция или класс для таких работ в будущем.
     
  14. NR55RU

    NR55RU Активный пользователь

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    Главный принцип в том что ты задумал не написать список всего что опасно и это удалить а написать список всего что ты разрешаешь вставлять и что безопасно при этом а остальное удалить что бы это не было.
    А str_replace это как раз таки концепция первого варианта.
    С помощью простого регулярного выражения можно найти все что после тега идет к примеру <b(.*)> все что в скобках что бы там не было хоть черт лысый будет найдено и удалено или оставлено если соответствует твоим правилам безопасности.

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