2015-06-09 3 views
0

Как можно дезинфицировать дерево DOM HTML из всех вхождений JavaScript, что означает: on(click|mouseover|etc), href:javascript..., <script> и все другие возможные варианты (встроенные) JavaScript при использовании JavaScript?Стриптиз JavaScript из HTML Дерево DOM с JavaScript

Например: Я хочу, чтобы пользователи загружали свой HTML-файл, копировали содержимое в тегах <body> и вставляли его на одну из моих страниц. Я не хочу разрешать JavaScript в своих HTML-файлах. Я мог бы использовать <iframe sandbox>, но я подумал, есть ли другой способ.

+0

В чем проблема? Это было бы невероятно тяжело и на самом деле даже невозможно было удалить всех обработчиков, если вы не уничтожили и не воссоздали всю DOM. Похоже, что должен быть лучший способ. –

+0

Как сказал @squint, вам, вероятно, потребуется заменить весь DOM. Но это может быть очень упрощено. Например, вы можете взять 'document.body.outerHTML' в виде строки, выполнить множество регулярных выражений, чтобы очистить код HTML, а затем заменить его обратно. – alesc

+0

Обновлен вопрос, чтобы проиллюстрировать мой вариант использования. – Roger

ответ

0

Следующая коллекция Element.attributes для удаления inline on обработчиков и атрибутов, содержащих слово «javascript» - без влияния на другие атрибуты DOM.

function disableInlineJS() { 
 
    var obj = document.querySelectorAll('*'); 
 

 
    for (var i = 0; i < obj.length; i++) { 
 
    for (var j in obj[i].attributes) { 
 
     var attr = obj[i].attributes[j]; 
 
     if ((attr.name && attr.name.indexOf('on') === 0) || 
 
      (attr.value && attr.value.toLowerCase().indexOf('javascript') > -1) 
 
     ) { 
 
     attr.value= ''; 
 
     } 
 
    } 
 
    } 
 
}
<button onclick="disableInlineJS()">Disable inline JavaScript</button><hr> 
 

 
<div onmouseover="this.style.background= 'yellow';" ONmouseout="this.style.background= '';" style="font-size:25px; cursor: pointer;"> 
 
    Hover me 
 
    <br> 
 
    <a href="javAsCriPT:alert('gotcha')" style="font-weight:bold">Click me!</a> 
 
    <br> 
 
    <a href="http://example.com">Example.com!</a> 
 
</div> 
 
<button onclick="alert('gotcha')">Me, me!</button>

Я не думаю, что есть способ, чтобы удалить script элементы, прежде чем они имели возможность работать.

Смежные вопросы