防止XSS - 删除JSON中的<script>标记

时间:2017-10-18 18:54:42

标签: javascript json json.net .net-core xss

我试图通过 Jbject 中的 JSON 来阻止JavaScript注入,如下所示:

&#xA;&#xA;
 公共类JsonService:IJsonService&#xA; {&#XA; private JsonSerializerSettings _jsonSerializerSettings = new JsonSerializerSettings()&#xA; {&#XA; StringEscapeHandling = StringEscapeHandling.EscapeHtml&#xA; };&#XA;&#XA; public JObject SanitizeJson(JObject jsonToSanitize){&#xA;&#xA; string sanitizedJsonString = JsonConvert.SerializeObject(jsonToSanitize,_jsonSerializerSettings);&#xA; JObject sanitizedJson = JObject.Parse(sanitizedJsonString);&#xA;&#xA; return sanitizedJson;&#xA;&#xA; }&#xA;  
&#xA;&#xA;

这一切都很有趣,直到我意识到我的输入看起来像这样:

&#xA;&# xA;
  {&#xA;“submission”:{&#xA; “firstName”:“&lt; script&gt; document.write('script kiddie');&lt; / script&gt;”,&#xA; “生日”:“05/21/2015”,&#xA; “提交”:[]&#xA; }&#xA;}&#xA;  
&#xA;&#xA;

我的“ sanitizedJsonString ”如下所示:

&# XA;&#XA;
&#XA;

“{\”submission \“:{\”firstName \“:\”\ u003cscript \ u003edocument.write(\ u0027script&#xA; kiddie \ u0027); \ u003c / script \ u003e \“,\”生日\ “:\”05/21/2015 \“,\”提交\“:[]}}”

&#xA;
&#xA;&#xA;

和我的“< code> sanitizedJson “看起来像这样:

&#xA;&#xA;
  {{&#xA; “提交”:{&#xA; “firstName”:“&lt; script&gt; document.write('script kiddie');&lt; / script&gt;”,&#xA; “生日”:“05/21/2015”,&#xA; “提交”:[]&#xA; }&#xA;}}&#xA;  
&#xA;&#xA;

请注意,虽然格式化为字符串确实逃避了javascript,但它正好在代码中我把它变回 JObject 。换句话说,脚本将保存到数据库中。我的最终目标不是将表单提交(通过JSON我无法控制)保存在数据库中。我需要在返回客户端时将字符串序列化为 JObject ,因此我需要从JObject中清除它。我很想做 str.Replace(“&lt;”,“”)等,但这显然不是一个真正的解决方案。

&#xA;&#xA;

如何完成清除&lt; script&gt; 标记?

&#xA;&#xA;

评论添加:

&#xA;&#xA ;
    &#xA;
  1. 我从第三方前端获得JSON。
  2. &#xA;
  3. 我将JSON发送回第三方前端,其中一些将呈现为html。
  4. &#xA;
&#xA;&#xA;

编辑2:

&#xA;&#xA;

尝试<代码> AntiXSS 通过NuGet,它与.NET Core不兼容: https:/ /www.owasp.org/index.php/.NET_AntiXSS_Library

&#XA;

1 个答案:

答案 0 :(得分:0)

我认为最好的选择是当你看到任何可疑字符时拒绝输入JSON。但是当无法做到这一点时,我们至少可以对其进行XSS攻击验证。 我在同一条船上我在这里找到另一个问题的指针:AntiXSS in ASP.Net Core

希望你也可以从这个参考文献中找出你的解决方案。