Yve*_*ves 27 asp.net-mvc asp.net-core-mvc
什么相当于MVC5中MVC5的@Json.Encode
方法?在MVC5中,我们可以在视图中访问这些方法.但是我找不到任何可以从MVC 6视图访问的方法.
如果MVC6中已有内置功能,我不想编写辅助方法.
Yve*_*ves 42
经过一番搜索,发现它:
@inject IJsonHelper Json;
@Json.Serialize(...)
Run Code Online (Sandbox Code Playgroud)
Cud*_*nny 15
我在以下方面取得了成功:
@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(myObj) as String)
Run Code Online (Sandbox Code Playgroud)
我不确定Json.Encode是否已经成功,因为它是System.Web的一部分现在已经消失了.
的功能之一@Json.Encode()
是JSON字符串中的实体的自动HTML编码,这有助于避免XSS漏洞。该JsonHelper
班是基于现在Json.NET系列化,如果配置得当,该做的这个相同的功能支持,至少部分(或全部)。如果将不受信任的数据序列化,则此处的其他解决方案可能会受到XSS攻击。
漏洞的简要示例:
<script>
window.something = @Json.Serialize(new { someprop = "Hello</script><script>alert('xss')</script><script>" });
</script>
Run Code Online (Sandbox Code Playgroud)
将呈现为
<script>
window.something = {"someprop":"Hello
</script>
<script>alert('xss')</script>
<script>"};</script>
Run Code Online (Sandbox Code Playgroud)
要正确地将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>
Run Code Online (Sandbox Code Playgroud)
呈现为:
<script>
window.something = {"someprop":"Hello\u003c/script\u003e\u003cscript\u003ealert(\u0027xss\u0027)\u003c/script\u003e\u003cscript\u003e"};
</script>
Run Code Online (Sandbox Code Playgroud)
在此处可以找到将数据安全地序列化到ASP.NET Core中的页面的其他一些方法:https : //github.com/aspnet/Docs/blob/master/aspnetcore/security/cross-site-scripting.md
归档时间: |
|
查看次数: |
15326 次 |
最近记录: |