У меня есть приложение JavaScript, в котором я использую клиентские шаблоны (underscore.js , Backbone.js).
Данные для начальной загрузки страницы привязываются к странице следующим образом (файл .cshtml Razor):
<div id="model">@Json.Encode(Model)</div>
Механизм Razor выполняет экранирование, поэтому, если Модель
имеет значение
new { Title = "<script>alert('XSS');</script>" }
, на выходе мы have:
<div id="model">{"Title":"\u003cscript\u003ealert(\u0027XSS\u0027)\u003c/script\u003e"}</div>
Что после операции «синтаксического анализа»:
var data = JSON.parse($("#model").html());
у нас есть данные объекта с полем «Заголовок»
ровно «»
!
Когда это идет в шаблон подчеркивания, он предупреждает.
Каким-то образом \ u003c-
подобные символы обрабатываются как правильные символы « <
».
Как мне избежать символов « <
» в <
и >
из БД (если они каким-то образом туда попали)?
Может быть, я могу настроить Json.Encode
сериализация для экранирования этих символов?
Может быть, я могу настроить Entity Framework
, который я использую, для автоматического исключения этих символов абсолютно все время при получении данных из БД?