MVC6中MVC5的@Json.Encode
方法的等价物是什么?在MVC5中,我们可以在视图中访问这些方法。但我找不到任何可以从MVC 6视图中访问的方法。
如果MVC6中已有内置功能,我不想编写辅助方法。
答案 0 :(得分:39)
经过一番搜索,找到了它:
@inject IJsonHelper Json;
@Json.Serialize(...)
答案 1 :(得分:13)
我在以下方面取得了成功:
Sub msgAlert()
MsgBox "First Response Time (hours)= " & _
Worksheets("Parsing").Range("H21").Value & _
vbCrLf & "Investigation Time (hours)= " & _
Worksheets("Parsing").Range("I21").Value & _
Format(dTotalArea, "&#,##0")
End Sub
我不确定Json.Encode是否已成功,因为它是System.Web的一部分,现在已经消失了。
答案 2 :(得分:5)
@Json.Encode()
的一个功能是对JSON字符串中的实体进行自动HTML编码,这有助于避免XSS漏洞。 JsonHelper
类现在基于Json.NET序列化,如果配置正确,它至少支持一些(或全部)相同的功能。如果不受信任的数据被序列化,其他解决方案可能容易受到XSS攻击。
漏洞的快速示例:
<script>
window.something = @Json.Serialize(new { someprop = "Hello</script><script>alert('xss')</script><script>" });
</script>
将呈现为
<script>
window.something = {"someprop":"Hello
</script>
<script>alert('xss')</script>
<script>"};</script>
要正确配置Json.NET以转义HTML实体,可以使用@Json.Serialize(object, serializerSettings)
重载并将StringEscapeHandling覆盖为EscapeHTML。可以在辅助类中定义或注入设置。
@using Newtonsoft.Json
<script>
@{
var settings = new JsonSerializerSettings {StringEscapeHandling = StringEscapeHandling.EscapeHtml};
}
window.something = @Json.Serialize(new { someprop = "Hello</script><script>alert('xss')</script><script>" }, settings);
</script>
将其呈现为:
<script>
window.something = {"someprop":"Hello\u003c/script\u003e\u003cscript\u003ealert(\u0027xss\u0027)\u003c/script\u003e\u003cscript\u003e"};
</script>
可以在此处找到一些将数据安全地序列化到ASP.NET Core中的页面的其他方法:https://github.com/aspnet/Docs/blob/master/aspnetcore/security/cross-site-scripting.md