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