首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >阻止XSS的Json.NET SerializeObject转义值

阻止XSS的Json.NET SerializeObject转义值
EN

Stack Overflow用户
提问于 2012-05-25 22:29:25
回答 3查看 18K关注 0票数 30

使用Json.NET

JsonConvert.SerializeObject(new { Property = "<script>alert('o hai');</script>" })

返回

{"Property":"<script>alert('o hai');</script>"}

是否有可能通过SerializeObject对值进行转义以防止恶意脚本执行?我不希望对对象本身进行更改。

编辑:理想情况下,我希望将清理集成到SerializeObject调用中,而不必在SerializeObject之前或之后处理对象。

编辑:从JsonConvert.SerializeObject输出的字符串被赋值给脚本块中的全局变量,我认为这就是XSS问题所在。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-10 17:39:37

version 4.5.11中添加了实现这一点的功能

这使您可以向输出中添加各种类型的转义。

这是我的LinqPad测试:

    var settings = new JsonSerializerSettings();

    settings.StringEscapeHandling = StringEscapeHandling.EscapeHtml;

    var output = JsonConvert.SerializeObject(new { Property = "<script>alert('o hai');</script>" }, settings);

    Debug.Print(output);

输出

{"Property":"\u003cscript\u003ealert(\u0027o hai\u0027);\u003c/script\u003e"}

作为一个免责声明,这不是修复xss的金弹,但鉴于您的示例,应该可以帮助您减轻它的影响。

票数 45
EN

Stack Overflow用户

发布于 2012-05-30 02:15:15

这可能并不理想,但这是我的解决方案(至少目前是这样):

JsonConvert.SerializeObject(new { Property = "<script>alert('o hai');</script>" }, new HtmlEncodeStringPropertiesConverter());

如果值是字符串,则使用一个简单的JsonConverter对值执行HtmlEncode

public class HtmlEncodeStringPropertiesConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(string);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(Encoder.HtmlEncode(value.ToString()));
    }
}

(Encoder是来自AntiXSS库的Microsoft.Security.Application.Encoder )

票数 18
EN

Stack Overflow用户

发布于 2012-05-25 22:30:48

不,JSON.NET是一个JSON序列化程序。它不是XSS消毒器。你可以看看微软的AntiXSS库。这里有一个关于它的用法的article on MSDN (有点过时,但仍然相关)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10756232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档