используя encodeURI для отображения всей страницы - PullRequest
1 голос
/ 26 сентября 2010

Привет, я делаю хром расширение.Когда я сохраняю страницу в базе данных в виде строки, а затем открываю ее в виде схемы dataURI, например:

d = 'data:text/html;charset=utf-8'+encodeURI('HTML TEXT')
location.reload(d);

Проблема заключается в том, что страница, скажем, имеет имя http://X/,в котором я выполнил вышеупомянутую команду, теряет файлы javascript в своей голове.Я подумал об использовании document.write(d), если к d добавлена ​​строка с <head>...</head> из http://X/.

Но это открывает большую проблему уязвимости для XSS.На данный момент я пытаюсь вспомнить теги белого списка при сохранении исходной страницы ... есть ли другой способ?

1 Ответ

0 голосов
/ 29 мая 2011

Я не уверен, что вы подразумеваете под http://X/, но если вы хотите, чтобы скопированный веб-сайт сохранил свое происхождение (т.е. код, который вы даете, работает точно так же, как если бы он был загружен с http://X/), то я боюсьневозможно со стандартными методами DOM (это может быть уязвимость безопасности, которая обходит политику безопасности того же источника).

Если вы хотите безопасно запустить сторонний исходный код, используйте это:

<iframe sandbox src="data:…"></iframe>

Вы можете изменить источник и вставить туда <base href="http://X/">, чтобы относительные URL работали правильно.

...