c # mvc html.raw разрешает межсайтовый скриптинг - PullRequest
0 голосов
/ 17 мая 2018

Я использовал элемент MVC @ Html.Raw для сохранения URL в переменной javascript.Но это делает мой URL уязвимым для атаки XSS.

Если кто-то помещает строку запроса как:? Budget = 0-8 "; alert ('a') //

И я делаю:var url = "@ Html.Raw (" domain /? budget = 0-8 "; alert ('a') //") ", он предупреждает" a "в браузере пользователя.

Как я могуизбежать этого?

1 Ответ

0 голосов
/ 17 мая 2018

.Net Core

Если ваша цель состоит в том, чтобы иметь это как переменную в javascript, вы должны использовать @Json.Serialize() с вашей точки зрения с JsonSerializerSettings.StringEscapeHandling = StringEscapeHandling.EscapeHtml.

Пример:

<script>
    var myQueryParams = @Json.Serialize(new { url = Model.SomeUserProvidedString }, new Newtonsoft.Json.JsonSerializerSettings() {StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml });
</script>

myQueryParams.url будет html-экранированным URL-адресом и запрещает использование XSS через Model.SomeUserProvidedString.


.Net Framework MVC

Framework MVC не имеет @Json.Serialize() - вы можете восстановить эту функцию, если ваш пакет включает в себя Newtonsoft.Json. Это основано на реализации * .Net Core с открытым исходным кодом @Json

HtmlString SerializeToJson(object obj)
{
    var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj, new Newtonsoft.Json.JsonSerializerSettings() { StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml })
    return new HtmlString(jsonString);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...