Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.10.2013, 22:04
Новичок на форуме
Отправить личное сообщение для VBog Посмотреть профиль Найти все сообщения от VBog
 
Регистрация: 18.10.2013
Сообщений: 5

innerHTML и html со скриптом
Ткните носом, пожалуйста!
Второй день сижу любуюсь на три строчки:
var el = document.getElementById('content_id');
var html = refs_proc(el.innerHTML);
el.innerHTML = html;		// Что делать?

Забираем из <div id='content_id'> текст, написанный пользователем. Обрабатываем его в refs_proc() (добавляет ссылки по заданной комбинации символов - работает исправно, не грешу). И отправляем обратно в <div id='content_id'>. Все хорошо, за исключением того, что в тексте пользователя может оказаться <script>...</script> (где и сколько - только пользователь знает), а скрипты, как известно, с innerHTML не дружат. В голове кружатся какие-то дикие схемы с разбором текста на код-некод. Чувствую, что есть простое решение - не я первый кто с этим сталкивается, но зациклился... Помогите!
Ответить с цитированием
  #2 (permalink)  
Старый 18.10.2013, 22:07
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

например, заменять <script> на <js>
Ответить с цитированием
  #3 (permalink)  
Старый 18.10.2013, 22:13
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

var el = document.getElementById('content_id');
var html = refs_proc(el.innerHTML);
el.innerHTML = html.replace(/<([^<>]*?script[^<>]*?>)/img,'&lt;$1&gt;');        // Что делать?


<div id='content_id'></div>


<script type="text/javascript">
var el = document.getElementById('content_id');
var html = '<b>Вася</b><script type="text/javascript">alert("Привет")<\/script>'
el.innerHTML = html.replace(/<([^<>]*?script[^<>]*?)>/img,'&lt;$1&gt;');
</script>

Последний раз редактировалось Deff, 18.10.2013 в 22:20.
Ответить с цитированием
  #4 (permalink)  
Старый 18.10.2013, 22:38
Новичок на форуме
Отправить личное сообщение для VBog Посмотреть профиль Найти все сообщения от VBog
 
Регистрация: 18.10.2013
Сообщений: 5

Deff, увы. Дело именно в том, что в результатах должно вылезти не Вася<script type="text/javascript">alert("Привет")</script>, а Вася и появится окно сообщения с Приветом!То есть, скрипт должен сработать!
Ответить с цитированием
  #5 (permalink)  
Старый 18.10.2013, 22:50
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от VBog
скрипт должен сработать
Или eval или .createElement('script'), но в обоих случаях придется парсить текст, ловить тег скрипта.
Ответить с цитированием
  #6 (permalink)  
Старый 18.10.2013, 22:58
Новичок на форуме
Отправить личное сообщение для VBog Посмотреть профиль Найти все сообщения от VBog
 
Регистрация: 18.10.2013
Сообщений: 5

eval пробовал - не тянет. А на .createElement я как раз и зациклился - очень длинно получается.
Однако, большое спасибо за мысль о подмене символов в <script>. Может что-нибудь соображу по поводу <scr+ipt>....
Ответить с цитированием
  #7 (permalink)  
Старый 19.10.2013, 00:22
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от VBog
Вася и появится окно сообщения с Приветом!То есть, скрипт должен сработать!


C чегой то ? мы заменили угловые скобки на текстовый вариант,
Иначе подобные теги работали в любом cообщении.
Видите Вася - жирный, а скрипт - текст - иначе бы он не был виден
Ответить с цитированием
  #8 (permalink)  
Старый 19.10.2013, 00:37
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от BETEPAH
Или eval или .createElement('script'), но в обоих случаях придется парсить текст, ловить тег скрипта.
Дык я думал нужно исключить срабатывание
Скрипты от пользователей - чреваты, в том числе и взломом сайта,
Их запускают в изолированном фрейме, либо ток на текущем пользователе по кнопке DEMO (тогда запуск только у текущего пользователя
По кнопке аppendChild элемент с контентом в нужное место

А так - типичный Вариант применения зловреда - считывания юзер пароля, с предварительным aвтовыкидыванием пользователя с сайта
Ответить с цитированием
  #9 (permalink)  
Старый 19.10.2013, 10:21
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от Deff
либо ток на текущем пользователе по кнопке DEMO
Мне кажется, это именно тот случай
Ответить с цитированием
  #10 (permalink)  
Старый 19.10.2013, 11:09
Новичок на форуме
Отправить личное сообщение для VBog Посмотреть профиль Найти все сообщения от VBog
 
Регистрация: 18.10.2013
Сообщений: 5

Сообщение от Deff Посмотреть сообщение
А так - типичный Вариант применения зловреда
Да, Вы абсолютно правы, а следовательно, либо кнопка, либо без php и сервера не обойтись.

Но, вот что интересно, совершенно случайно заметил такую особенность, (причем на всех браузерах), если этот скрипт(<script type="text/javascript">alert("Привет")<\script>) еще выполняется, и провести сразу операцию обновления, Петя на Васю замениться, а скрипт останется не поврежденным!
<div id='content_id'>
   <b>Петя</b><script type="text/javascript">alert("Привет")<\script>
</div>
<script type="text/javascript">
   var el = document.getElementById('content_id');
   var html =el.innerHTML;
   el.innerHTML = html.replace("Петя","Вася");
</script>

До конца этот механизм работы я не понял, но это так... для общего развития.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как с помощью javascript взять данные из одного файла html и закинуть в другой? rusik Общие вопросы Javascript 10 08.08.2016 12:11
Вывод html кода со скриптом через javasript royksopp Общие вопросы Javascript 8 19.02.2013 19:31
HTML код тэга (не innerHTML) elf2002 Javascript под браузер 16 30.12.2011 22:28
Типографика и HTML код Manjuriano (X)HTML/CSS 3 23.11.2011 12:22
Передача кода HTML Владимир Седов Общие вопросы Javascript 2 12.04.2011 16:48