gpt4 book ai didi

c# - asp.net 核心中的 csp 报告端点

转载 作者:行者123 更新时间:2023-11-30 15:51:32 28 4
gpt4 key购买 nike

我正在尝试在 asp.net 核心 web 应用程序中设置 CSP,并且 CSP 部分工作正常,当它们被发送到 report-uri 端点时,我可以在浏览器控制台中看到违规行为。

但是,我似乎无法在 Controller 中创建正确的方法来接收这些消息!

我在 Controller 中创建了一个方法:

[HttpPost]
[AllowAnonymous]
public IActionResult UriReport(CspReportRequest request)
{
_log.LogError("CSP violation: " + request);
return Ok();
}

它会被调用,但是'request'参数总是空的。一些搜索显示我需要使用 [FromBody] 属性从正文中读取数据,但是一旦我把它放进去,它就不再被调用了。(CspReportRequest 是一个具有与 csp-report 负载匹配的属性的类,但它也不适用于字符串类型。)

因此进一步阅读建议我为发送正文的“application/csp-report”内容类型添加一个处理程序:

services.Configure<MvcOptions>(options => {
options.InputFormatters.OfType<JsonInputFormatter>().First().SupportedMediaTypes.Add(
new MediaTypeHeaderValue("application/csp-report"));
});

但这似乎并没有什么不同。

那么 - 我如何制作正确的 Controller 签名和/或正确的服务处理程序选项来接收数据。

最佳答案

完成这项工作需要两件事。第一个是添加 [FromBody]给你的CspReportRequest request参数1:

public IActionResult UriReport([FromBody] CspReportRequest request)

没有[FromBody] , JsonInputFormatter不会用于解析请求正文。然而, [FromBody] ,您将开始看到 415回复。

第二件事是配置 JsonInputFormatter支持 application/csp-report媒体类型,您已经尝试过。您的方法的问题是实际上有 两个 JsonInputFormatter 的实例配置,你正在影响错误的。如果您只是从 First() 更改至 Last() 2,它应该可以工作。

为什么?第一个JsonInputFormatter在集合中实际上是 JsonPatchInputFormatter 的一个实例, 它扩展了 JsonInputFormatter :

public class JsonPatchInputFormatter : JsonInputFormatter

这是最先添加的,因此它是您要配置的那个。它无法处理 CspReportRequest 的实例因为它有关于处理 JsonPatchDocument<T> 的特定规则等,所以它传递给第二个 JsonInputFormatter .第二个实例未配置为支持 application/csp-report ,正如我所提到的,因此它也无法处理请求。


1 如果您使用 [ApiController] , 你不需要使用 [FromBody] ,但是您问题中的所有内容都表明您没有使用 [ApiController] .

2 使用 Last()而不是 First()这里不一定是最好的方法,但它应该证明问题出在哪里。有很多方法可以得到具体的JsonInputFormatter你感兴趣。

关于c# - asp.net 核心中的 csp 报告端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57146684/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com