c#mvc html.raw允许跨站点脚本攻击

时间:2018-05-17 13:24:27

标签: asp.net-mvc xss

我使用MVC @ Html.Raw元素将URL保存到javascript变量中。但这使得我的网址容易受到XSS攻击。

如果有人将查询字符串放入:?budget = 0-8"; alert(' a')//

我这样做:var url =" @ Html.Raw(" domain /?budget = 0-8&#34 ;; alert(' a')//&# 34;)",它警告' a'在用户浏览器上。

我该如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

.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转义的网址,并阻止XSS通过Model.SomeUserProvidedString

.Net Framework MVC

框架MVC没有@Json.Serialize() - 如果你的软件包包含Newtonsoft.Json,你可以重新创建这个函数。这基于open source .Net Core implementation of @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);
}