Рассмотрим следующие обстоятельства:
Принимая во внимание тот факт, что JS присущ определенный уровень безопасности, насколько небезопасным является то, что я только что сделал?
Шпаргалка OWASP XSS говорит, чтобы избежать всех «ненадежных данных». Является ли результат моего запроса AJAX ненадежным с учетом вышеуказанных обстоятельств? Является ли результат любого запроса AJAX «ненадежным»?
Является ли вставка HTML таким способом плохой практикой? Если так, что я должен делать вместо этого?
Изменить, чтобы уточнить пару вещей:
Пока ответ действительно статичен и не связан с пользовательским вводом любого вида, это отлично. Сам AJAX (как вы намекали) не делает его уязвимым для XSS (при условии, что транспорт безопасен, что практически означает https).
Одним из предостережений (не обязательно в вашем случае, но в целом) может быть то, что вы считаете вводом пользователя, а что нет. Ваше приложение всегда получает ввод от пользователя, или он может использовать параметры, полученные ранее, или даже другим приложением. Даже если вы не передаете параметры, существуют заголовки запросов, файлы cookie (если они есть), и пользовательский ввод также может быть считан из базы данных. Даже если они выглядят как статические данные в базе данных, в какой-то момент они могли быть получены от какого-то пользователя, вероятно, законного (но неконтролируемого), или внешнего злоумышленника, или они могли быть получены из другого приложения, которое пишет в та же база данных (в любом случае, это не очень хорошая практика).
Короче говоря, если данные, которые вы отправляете обратно, на самом деле являются просто статическими данными (как в жестком коде), они не уязвимы, но есть много способов, которыми они могут стать динамичными, и оттуда это ваше (в идеале основанное на риске) решение, что вы защищать и от того, что вы доверяете.
Лучше всего по умолчанию кодировать все, чтобы избежать ошибок. Если вы уверены, что доверяете источнику данных, который хотите вставить в DOM как HTML, это нормально. Моделирование угроз может помочь выяснить, чему вы должны и не должны доверять, но в некоторых случаях это также может быть очевидным.
Других решений пока нет …