提问人:msteel9999 提问时间:10/30/2023 更新时间:10/30/2023 访问量:24
将动态 JSON 发送到 DotNet 核心控制器操作,没有 XSS 漏洞
Send Dynamic JSON to DotNet Core Controller Action without XSS Vulnerability
问:
我正在将 json 作为字符串发送到 PUT 请求正文中的控制器操作。
我们的安全扫描程序已正确识别出此漏洞为 XSS 漏洞,我们可以很容易地重现此问题。
我正在尝试将提供给操作的参数验证为有效的 JSON,但我遇到了一些麻烦。我不愿意手动编写这样的东西,这在许多应用程序中很常见。
有一个 .Net 库 AntiXss,但由于我使用的是 .Net 核心,因此不可用。我还查看了几个 nuget 包,但它们似乎都包装了这个库。
提前感谢您的任何建议
答:
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
这是一个不错的答案,但我没有固定的模式。它是基于用户控件上下文的动态的。
评论