The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Разработчики Mozilla представили html2dom, альтернативу innerHTML

25.09.2013 09:04

Разработчики Mozilla попытались создать удобную альтернативу innerHTML для вставки статичных HTML-блоков без необходимости предварительного ручного разбора строковых данных. Метод innerHTML очень популярен благодаря своей простоте, но он чреват потенциальными проблемами безопасности при подстановке непроверенного внешнего ввода.

Прототип альтернативной системы оформлен в виде библиотеки html2dom, которая на основе строки с HTML генерирует JavaScript-код для корректного создания элементов DOM, т.е. заменяет единый вызов innerHTML на серию простых обращений к DOM. Указанный подход позволяет избежать запуска HTML-парсера для длинных HTML-строк, что положительно влияет на производительность и позволяет защититься от XSS-атак через подстановку в обрабатываемый через innerHTML ввод нежелательных тегов.



  1. Главная ссылка к новости (https://blog.mozilla.org/secur...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/37989-html
Ключевые слова: html, javascript, web
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (31) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (-), 10:17, 25/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –12 +/
    ха !! якобы проще избежать инжекции - путем использования JS-крапа, чем громоздкого, но безопасного html ? :)  когнитивный диссонанс, однако. ужО второй десяток лет как - инжекция кода чрез JS - основной путь малвари на компы )
    и вообще, пора уже учить html/nosql+sql связку веб-мастерам, JS-трэш - откровенно задолбал.
     
     
  • 2.71, Sabakwaka (ok), 03:02, 26/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    А ты намерен «избежать инжекции»?
    Каким путём?
    Предоставлением для посещений своего личного, свободного от малвари сайта?
    А как это «избежит от инжекции» в отношении миллиончика не твоих сайтов?
     
     
  • 3.73, Аноним (-), 14:32, 27/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    о, есть десятки проектов на тему, вы удивитесь.
    из них - добрая треть концентрируется на отсечении 3-rd party контента.
    остальные - на enforce-инге HTTPS/HSTP, веб-сокетов итп, замене кукисов на странных, но легковесных мутантов керберос и ldap, но ISC и IETF не спешит это утверждать. оно и понятно, персонал АНД и Оффиса Директора НАцразведки, Госдеп - не зря З/П получают ;)
     

  • 1.2, MidNighter (ok), 10:18, 25/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    Разработчики фреймворка GWT наоборот утверждают что innerHTML лучше чем доступ через DOM. хз уже кому верить.

    http://www.gwtproject.org/doc/latest/DevGuideUiCellWidgets.html

    These widgets are designed to handle and display very large sets of data quickly. A cell widget renders its user interface as an HTML string, using innerHTML instead of traditional DOM manipulation. This design follows the flyweight pattern where data is accessed and cached only as needed, and passed to flyweight Cell objects.

     
     
  • 2.65, vn971 (ok), 18:53, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    может быть потому что GWT уже сам всё проэскэйпил?
     
  • 2.70, Аноним (-), 00:27, 26/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    GWT овнище тормозное, не сильно сложный проект с несколькими окнами а-ля проводник + топология сети в виде значков весит 40 метров, тормозит страшно, на мобильных девайсах через одно работает - только на тех, для которых в GWT условно говоря ifdef прописан.
    Аналогичное приложение на js + jquery и kendo - порхает как бабочка.
     
     
  • 3.76, A.N. Onim (?), 17:04, 29/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Я не фанат GWT, но 40 МБ приложение показывает только экстремальную кривизну рук программистов такого приложения. Не самое маленькое приложение, с extGWT во все поля (плюс ещё пара-тройка библиотек) за мегабайт так и не перешагнуло. И это без оптимизации.
     

  • 1.3, Аноним (-), 10:47, 25/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Библиотека исправляет разметку. По крайней мере, незакрытые теги успешно закрывает.
     
     
  • 2.4, annulen (ok), 11:58, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Они говнокод специально поощряют?
     
     
  • 3.12, pro100master (ok), 14:32, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +3 +/
    в смысле "говнокод"? С спецификации явно указано, когда и где можно не закрывать теги. Вы наверное и не читали вовсе, но осуждаете?:)
     
     
  • 4.34, Аноним (-), 17:54, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Тогда нафига что-то "исправлять", простите?
    Я думал, речь идет о тегах, которые нужно закрывать, а они не закрыты.
     
     
  • 5.69, Аноним (-), 22:44, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    А у нас все браузеры идеально поддерживают спецификацию? Хотя бы распространенные? Хоть один?
     
  • 2.72, Аноним 2 (?), 03:11, 26/09/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Учи мат часть. innerHTML всегда автоматом закрывал теги
     

  • 1.5, ILYA INDIGO (ok), 12:09, 25/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    >Метод innerHTML далёк от оптимальности, небезопасен и его использование считается плохим стилем.

    Что за бред?! Кем считается? Говнокодерами, или NIH-ерами?
    innerHTML он быстрее цепочек createElement Apendchild когда нужно просто вставить статический текст в тег с минимальным парсингом и соответственно doc.outerHTML=doc.innerHTML когда нужно просто убрать шелуху, например из ссылки сделать текст (убрать анкер) или тому подобное.
    Просто быстро и безопасно, при этом кросбраузерно.

     
     
  • 2.61, Аноним (-), 18:40, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    innerHTML является костылём, не описан в стандартах, и навязан Microsoft в Internet Explorer. То что его добавили в остальные браузеры для совместимости с IE погоды не делает.

     
     
  • 3.63, arisu (ok), 18:47, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > innerHTML является костылём, не описан в стандартах, и навязан Microsoft в Internet
    > Explorer. То что его добавили в остальные браузеры для совместимости с
    > IE погоды не делает.

    вообще-то, в документе от whatwg innerHTML ещё как описан. вместе с outerHTML и insertAdjacentHTML. you're welcome: http://domparsing.spec.whatwg.org/#extensions-to-the-element-interface

     
     
  • 4.66, Аноним (-), 18:54, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В whatwg скорее констатация фактического положения, некий стандарт де-факто. Официальный http://www.w3.org/TR/DOM-Parsing/ пока на стадии черновика.
     
     
  • 5.68, arisu (ok), 20:30, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +3 +/
    ага, официально у нас HTML5 не особо есть — однако никого это не останавливает.
     
     
  • 6.74, kurokaze (ok), 19:38, 28/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Да, этот мир несовершенен. Теперь ты знаешь это
     
  • 3.67, Crazy Alex (ok), 19:39, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Да начхать кто придумал полезную возможность. Доступна всем - что еще надо?
     

  • 1.7, Аноним (-), 14:02, 25/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Ну конечно, html распарсеный JS в серию JS вызовов изменяющих DOM он будет быстрей, чем innerHTML распарсеный нативным движком браузера напрямую и пакетно добавленым в дерево. Вот именно производительность от такого выигрывает!
     
  • 1.10, лох (?), 14:24, 25/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Супер "новость".
    Это, несомненно, самая важная новость дня, нет -- новость года. Премию автору! Во-первых, она революционно изменит весь подход к программированию в браузере, заставив отказаться от innerHTML и вообще всего-всего, кроме String.fromCharCode().
    Во-вторых, без сомнения, произойдёт революция в браузерах, innerHTML и все прочие ранее "полезные" вещи будут заменены на библиотеку html2dom.
    И конечно же, эта новость революционно изменит жизнь юзеров. Предвижу, что теперь в формах нельзя будет ничего ввести, так как у всех по умолчанию введённый в форму текст обязательно вставляется в страницу с помощью innerHTML.
    И вообще, я не понимаю, какого хрена ещё в браузерах не внедрили интерпретируемый x86-ассемблер с обязательной встроенной защитой от XSS? Надо бы написать...
     
     
  • 2.62, Аноним (-), 18:42, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Во-первых, она революционно изменит весь подход к программированию в браузере, заставив
    > отказаться от innerHTML

    Заставит использовать стандартные методы, а не костыль, добавленный в Internet Explorer.

     
     
  • 3.64, arisu (ok), 18:50, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Заставит использовать стандартные методы

    то есть, HTML5 не использовать, потому что он не стандарт (а в HTML5 это свойство есть, см. #63)… стой! а ведь в до-HTML5 и DOMParse того-с… отсутствует! долой библиотеку, которая использует нестандартный интерфейс!

     
  • 2.75, kurokaze (ok), 19:40, 28/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    >какого хрена ещё в браузерах не внедрили интерпретируемый x86-ассембле

    Ты хоть на ассемблере писал то? Спрашиваю потому как у тебя типично хейтерский пост получился

     

  • 1.16, Аноним (-), 15:22, 25/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Опять внешние фреймворки ....
     
     
  • 2.18, arisu (ok), 15:26, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Опять внешние фреймворки ….

    это какие? DOMParser, который в стандарте? или страшный паттерн visitor, которым обрабатывается выхлоп этого парзера?

     
     
  • 3.19, Аноним (-), 15:31, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Парадигмы усложняющие DOM дерево, хватает одного только JQuery .... который разрос
     

  • 1.23, Аноним (-), 16:12, 25/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    в прототипе используют обычный innerHTML , обходят элементы используя DOM и строят JS.
    непонятно зачем это может быть нужно.
     
     
  • 2.60, Аноним (-), 18:39, 25/09/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Стабильней работать точно не будет
     

  • 1.28, angra (ok), 16:57, 25/09/2013 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Благодаря безмозглому переводчику-фантазеру действительно сложно понять о чем на самом деле новость и для чего нужна эта библиотека.
    Данная либа НЕ подключается к готовому сайту наподобие jquery, knockout или еще что-то. Она НЕ предназначена для вызовов из js кода. Она НЕ нужна для статического HTML. Она используется для создания js кода. А уже созданный ею код вставляется программистом на страницу вместо использования innerHTML и строки текста с HTML шаблоном, в который подставляются пользовательские данные. Этой либе нет необходимости быть кроссбраузерной, так как использоваться она будет только на компе разработчика, а не клиентвов. Кроссбраузерным должен быть код, который она генерирует.
    Надо отметить, что либа создает код, который использует document.createDocumentFragment(), то есть не делает типичную ошибку тех, кто создает ноды напрямую в документе и удивляется почему innerHTML оказывается быстрее.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру