На 100% безопасно делать следующее? - PullRequest
5 голосов
/ 10 октября 2011

На 100% безопасно делать следующее:

var untrusted_input_from_3rd_party = '<script>alert("xss")<\/script>';
document.getElementsByTagName('body')[0].appendChild(document.createTextNode(untrusted_input_from_3rd_party));

Учитывая, что третья сторона может вводить что угодно (HTML, CSS и т. Д.), Могу ли я быть уверен, что это не принесет никакого вреда, если я пропущу его через createTextNode и затем добавлю в домен?

Ответы [ 3 ]

5 голосов
/ 10 октября 2011

Это прекрасный способ предотвратить XSS. Манипулирование DOM через createTextNode широко используется для безопасного встраивания стороннего текста.

Тем не менее, есть проблемы, кроме XSS. Он не делает ничего, чтобы остановить попытки социальной инженерии, если ненадежный ввод что-то вроде:

ПРЕДУПРЕЖДЕНИЕ. Мы обнаружили вредоносное ПО на вашем компьютере. Скопируйте и вставьте http://evil.org/ в адресную строку браузера, чтобы решить проблему.

Лучший способ предотвратить социальную инженерию (не считая стороннего контента) - прояснить, что контент исходит от третьей стороны.

1 голос
/ 10 октября 2011

Я не вижу, чтобы это выполнялось ни в одном стандартном современном браузере, а как текстовый узел.Хорошее чтение: http://www.educatedguesswork.org/2011/08/guest_post_adam_barth_on_three.html

1 голос
/ 10 октября 2011

Протестировал это сейчас. Кажется, чтобы быть правильным. Если что-то идет не так - это должна быть ошибка браузера, а не ваша.
Как обычно, сервер должен корректно просматривать все вводимые пользователем данные в формате html, а затем возвращать их пользователю.

Но чтобы снизить нагрузку на сервер (и если это приемлемо), вы можете использовать это наверняка.

...