Использование iframes для защиты остальной части страницы от сценариев в стороннем прокси-сервере div - PullRequest
0 голосов
/ 15 сентября 2011

Я взял на себя приложение «приборной панели», которое отображает множество вкусностей.

Одна из отображаемых вещей - это div, который заполняется содержимым сторонней веб-страницы (которая автоматически обновляет свое собственное содержимое). К сожалению, JavaScript на импортированной сторонней веб-странице влияет / обновляет всю страницу, на которой он находится.

Есть ли способ, которым я могу отображать содержимое сторонней страницы на своей собственной странице, в то же время помещая ее в «песочницу», чтобы предотвратить доступ к странице, на которой она находится?

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Поскольку ограничения межсайтового скриптинга не позволяют вам получать доступ к внешним HTTP-ресурсам через Ajax, вы должны использовать (встроенные) фреймы.

Мне известен только ОДИН способ запрета выполнения сценариев во фреймах. Однако Chrome не поддерживает этот метод.

var untrusted = document.getElementById("iframe-3rd-party");
untrusted.designMode = "On"; //No script can be run from the frame any more.

Если вы нашли способ избежать межсайтовых ограничений (например: CORS, X-Access-Control-Allow ), удалите теги сценариев и обработчики событий из кода. :

//xmlhttp_responsestring holds the responseText property of the XMLHttpRequest object
xmlhttp_responsestring
     .replace(/<script[^>]*?>\s*\/\/\s*<\[CDATA\[[\S\s]*?]]>\s*<\/script\s*>/gi, "")
     .replace(/<script[\S\s]+?<\/script\s*>/gi,"")
     .replace(/ o([nN])/g," &#111;$1").replace(/ O([Nn])/g," &#79;");

Все теги сценариев и все обработчики событий удаляются таким образом: все символы, которые начинаются с пробела, а затем "вкл", заменяются объектами HTML. Текст будет по-прежнему читабелен, пока слушатели событий отключены.

Обратите внимание, что последний фрагмент кода only имеет дело с тегами сценария и обработчиками событий. Он не имеет дело с внешними объектами, такими как Java-апплет и фреймы. Смотрите мой другой ответ для более продвинутой функции очистки.

1 голос
/ 15 сентября 2011

Я предлагаю вам использовать элемент iframe и поместить в него элемент div

...