Я создаю приложение Backbone.js и задаюсь вопросом, что лучший способ справиться с XSS, соответственно, с экранированием HTML при использовании Backbone.js.
В базовом примере приложения Todos из официальной документации Backbone.js данные не экранируются. Поскольку эти данные используются в шаблоне для рендеринга записей todo, можно выполнить код Javascript, введя следующий текст (может быть воспроизведен по ссылке выше):
"><script>alert('xss');</script>
При использовании сервера REST в качестве хранилища данных этот XSS является постоянным для каждого пользователя.
Как вы решаете эту проблему?
Моя идея состоит в том, чтобы избежать данных на сервере, поэтому возвращаемые данные будут безопасными для использования в шаблоне. Должен ли я всегда использовать wait: true
, чтобы убедиться в отсутствии рендеринга неизолированных данных? А для редактирования добавьте еще один атрибут с неэкранированными данными, который затем можно будет использовать для заполнения текстового поля с помощью .val()
?
Или вы не делаете этого и избегаете данных на клиенте, прежде чем создавать шаблон?