Проблема безопасности: анализ HTML с XMLHttpRequest? - PullRequest
0 голосов
/ 08 июня 2018

Основной вопрос

Анализирует ли HTML-файлы с XMLHttpRequest, используя responseType = "document", потенциальную проблему безопасности?

Примеры можно найти в MDN здесь: HTML в XMLHttpRequest

При установке documentType = "document" он попытается проанализировать URL-адрес (в нашем случае файл HTML) в узлах DOM и получить его.

Давайтескажем, у нас человек-посредник ситуация атаки (т.е. не используется HTTPS), и файл HTML заменяется.Мы в опасности?

Бонусный вопрос

Допустим, мы загружаем файл JSON вместо файла HTML.Использование documentType = "text" столь же безопасно, как и JSON.parse, т. Е. Код не оценивается?

1 Ответ

0 голосов
/ 09 июня 2018

Я не разработчик, но практикующий специалист по безопасности, поэтому прошу прощения за любые неточности.Короткий ответ с моей стороны - да, когда вы извлекаете и интерпретируете внешние данные, возникают угрозы безопасности.Это относится не только к HTML, но и к разбору XML или к любой форме содержимого, которое проходит через интерпретатор.Например, в AJAX результат XMLHttpRequest может выполнять некоторые действия от имени пользователя.Если файл выгружается, может произойти что-то подобное.

При создании приложения вы не сможете устранить все риски, но вы захотите снизить его до приемлемого уровня.Например, вместо включения внешнего кода, размещайте код самостоятельно.

Это относится и к вашей выборке XMLHttpRequest - откуда поступают данные?Больше риска связано с третьими сторонами и между доменами.Избегайте, если можете.Следует рассмотреть возможность блокировки совместного использования ресурсов между источниками с помощью политики, хотя Access-Control-Allow-Origin.HTTPS также не устраняет риск, поскольку, возможно, вы все равно не можете доверять третьей стороне, а HTTPS не полностью устраняет MIM-атаки.

Если, тем не менее, вы получаете то, что размещаете сами, и у вас есть доверенный каналчтобы получить, вы можете утверждать, что оставшийся риск невелик.

Что касается бонусного вопроса, я не уверен, будет ли это иметь большое значение.Я предполагаю, что с documentType = "text" вы получите длинную строку текста, которая в действительности является HTML-документом.Тогда что?Если вы все еще планируете его анализировать, сценарии могут выполняться.JSON.parse - это анализатор текста, который не будет загружать скрипты, но здесь, насколько я понимаю, вам все равно нужно подвергать себя синтаксическому анализу HTML.Решение, вероятно, состоит в том, чтобы убедиться, что вы можете доверять источнику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...