我使用MVC @ Html.Raw元素将URL保存到javascript变量中。但这使得我的网址容易受到XSS攻击。
如果有人将查询字符串放入:?budget = 0-8"; alert(' a')//
我这样做:var url =" @ Html.Raw(" domain /?budget = 0-8&#34 ;; alert(' a')//&# 34;)",它警告' a'在用户浏览器上。
我该如何避免这种情况?
答案 0 :(得分:0)
如果您的目标是将此作为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
。
框架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);
}