MarkHtml

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

    В отличии от других аналогичных библиотек, например Jevix, ставка сделана не на разрешающие теги и атрибуты, а на запрещающие. То есть, возможно вводить всё, кроме запрещённого.


    С помощью внешних библиотек Markdown Extra и Typograf, можно писать красиво оформленные тексты. Markdown хорош тем, что позволяет использовать прежний HTML код без изменения, и в то же время комфортно писать статьи в обычном текстовом редакторе (или <textarea>).

    Если нет необходимости использовать Markdown или Typograf, можно просто убрать код их подключения в начале файла markhtml.php.

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

    По-умолчанию настроен на вывод тегов и атрибутов в стиле HTML, но можно включить и XHTML режим.

    Тестировал код на различных хакерских вставках, работает отлично, но правда не уверен что вспомнил все небезопасные теги и атрибуты, если кто подскажет что упустил, буду дорабатывать код.

    Эту статью писал в Markdown с последующим переносом на хабр, так как после знакомства с этим замечательным форматом, стало невыносимо сложно писать HTML код не для вёрстки шаблона сайта.

    MarkHtml на Google Code: http://code.google.com/p/markhtml/ (hg)
    Прямая ссылка на архив с файлами: markhtml.zip

    Средняя зарплата в IT

    111 111 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 6 844 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 15

      0
      Мне кажется, примеры нужны. Для визуализации, ага. :)
        0
        Последнюю ссылку посмотрите, чем не пример.
          +1
          Имел в виду пример кода.
            0
            Ну так в исходниках есть пример кода, как использовать:

            include('markhtml.php');
            echo markhtml($text);
              +5
              «Ну так» в исходниках я и сам увижу. Интересно, когда в заметке показано.

              Вроде
              $markhtml = new MarkHtml;
              $result = $markhtml->filter($text);

              И
              $markhtml = new MarkHtml;
              $markhtml->xhtml = true; // вывод в xHTML
              $result = $markhtml->filter($text);
        +6
        фильтровать запрещенное как-то некошерно.
        вспомнить хотя бы знаменитый j a v a s c r i p t и аналоги.
        плюс введут завтра какой-нибудь новый небезопасный тэг и что?
          +3
          HTMLPurifier хоть и очень громоздкая библиотека, но мне кажется, что для чистки кода лучше ее использовать.
            0
            Спасибо за информацию о интересном продукте. Похоже, что он активно развивается в отличии от Jevix.
              0
              Я её вчера как раз смотрел, она конечно очень громоздка, но зато и возможности космические.
              +2
              Никому не советую использовать данную библиотеку, так как чистить по черному списку небезопасно. Также, автор не написал, сколько их XSS отсюда ha.ckers.org/xss.html отфильтровывает его библиотека.

              Единственный надежный способ — разбивать текст на теги, теги на аттрибуты (если требуетс яих тоже фильтровать), отдельно разбивать аттрибут style и прогонять все по белому списку, а затем пересобирать HTML заново. Или загрузить HTML в DOm/XML дерево, и опять-так пройтись по нему белым списком и собрать назад.

              А кто не хочет так делать, так и будет ловить XSS'ы и трусливо заменять буквы в слове javasript, ломая ссылки и код программ.
                0
                В принципе так и происходит, разбивается на теги и атрибуты, и потом собирается заново. Разве что стили убираются только по простому правилу — наличие открывающей скобки. В итоге хитрые методики внедрения плохого атрибута или тега не срабатывают. Остается проблема с содержимым атрибутов, обнаружил что мой фильтр пропускает такое: <IMG SRC="jav ascript:alert('XSS');"> (вставлена табуляция внутрь слова javascript:), нужно будет протестировать такую конструкцию на различных браузерах, скорее всего это проблема совсем уж старого браузера, но фильтр подправлю, чтобы искал и лишние символы в слове javascript.

                Спасибо за ссылку на этот сайт, хороший подбор материала.

                Все указанные атаки вполне пройдут «белые» списки, чаще всего проблемы с содержимым атрибутов, или использованием некоторых не безопасных тегов, таких как <script> <style>, которые удаляются и через белый список, и через черный.
                0
                оригинальный текст «сообщите мне о ней на»
                полученый текст «сообщите мне о&nbsp; ней на&nbsp;»
                вопрос, почему после «о» и «на», скрипт ставит &nbsp;?
                  0
                  Это типограф так делает, ставит неразрывный пробел:
                  — перед последним словом;
                  — после коротких слов;
                  — перед частицами: ли, ль, же, ж, бы, б;
                  — после знака № и §.

                  webfilin.ru/instruments/typograf/
                  0
                  Хм. На всякий случай, ссылка на Типограф в статье, мягко говоря, ведет не на типограф ;)

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое