将动态 JSON 发送到 DotNet 核心控制器操作,没有 XSS 漏洞

Send Dynamic JSON to DotNet Core Controller Action without XSS Vulnerability

提问人:msteel9999 提问时间:10/30/2023 更新时间:10/30/2023 访问量:24

问:

我正在将 json 作为字符串发送到 PUT 请求正文中的控制器操作。

我们的安全扫描程序已正确识别出此漏洞为 XSS 漏洞,我们可以很容易地重现此问题。

我正在尝试将提供给操作的参数验证为有效的 JSON,但我遇到了一些麻烦。我不愿意手动编写这样的东西,这在许多应用程序中很常见。

有一个 .Net 库 AntiXss,但由于我使用的是 .Net 核心,因此不可用。我还查看了几个 nuget 包,但它们似乎都包装了这个库。

提前感谢您的任何建议

角度 .net-core xss

评论


答:

0赞 Chintan Dhokai 10/30/2023 #1

这只是如何在 .NET Core 中验证和清理动态 JSON 的一个示例。还有其他选项可用,因此您应该选择最能满足您需求的选项。

using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Schema;

public class MyController : Controller
{
    [HttpPut]
    public IActionResult MyAction([FromBody] string json)
    {
        // Get the JSON schema.
        var jsonSchema = @"{
            '$schema': 'http://json-schema.org/draft-07/schema#',
            'type': 'object',
            'properties': {
                'name': {
                    'type': 'string'
                },
                'age': {
                    'type': 'integer'
                }
            },
            'required': ['name', 'age']
        }";

        // Create a JSON schema reader.
        var schemaReader = new JsonSchemaReader();
        var schema = schemaReader.ReadSchema(new JsonTextReader(new StringReader(jsonSchema)));

        // Create a JSON validating reader.
        var validatingReader = new JsonValidatingReader(new JsonTextReader(new StringReader(json)));
        validatingReader.Schema = schema;

        // Read the JSON.
        try
        {
            while (validatingReader.Read())
            {
                // ...
            }
        }
        catch (JsonReaderException e)
        {
            return BadRequest("Invalid JSON.");
        }

        // The JSON is valid.
        // ...
    }
}

评论

0赞 msteel9999 10/30/2023
这不是一个有效的答案,因为 AntiXss 是一个 .Net Framework 库,不能在 .Net core 中使用。这是我问题的症结所在
1赞 Chintan Dhokai 10/30/2023
更新了代码
0赞 msteel9999 10/30/2023
这是一个不错的答案,但我没有固定的模式。它是基于用户控件上下文的动态的。