亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

asp.net core 中的 csp-report 端點

asp.net core 中的 csp-report 端點

C#
梵蒂岡之花 2023-07-09 17:22:50
我正在嘗試在 asp.net core web 應用程序中設置 CSP,并且 CSP 部分工作正常,我可以在瀏覽器控制臺中看到違規行為,因為它們被發送到 report-uri 端點。但是,我似乎無法在控制器中創建正確的方法來接收這些消息!我在控制器中創建一個方法:[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"));});但這似乎沒有什么區別。那么 - 我如何制作正確的控制器簽名和/或正確的服務處理程序選項來接收數據。
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

要使這項工作成功,需要做兩件事。第一個是添加[FromBody]到您的CspReportRequest request參數1

public?IActionResult?UriReport([FromBody]?CspReportRequest?request)

如果沒有[FromBody],JsonInputFormatter將不會用于解析請求正文。但是,使用 后?[FromBody],您將開始看到415響應。

第二件事是配置JsonInputFormatter支持application/csp-report媒體類型,您已經嘗試過這樣做。您的方法的問題在于,實際上有兩個配置實例JsonInputFormatter,而您影響了錯誤的實例。如果你只是從 2 更改First(),Last()應該可以工作。

為什么?集合中的第一個JsonInputFormatter實際上是 的實例JsonPatchInputFormatter,它擴展了JsonInputFormatter

public?class?JsonPatchInputFormatter?:?JsonInputFormatter

這是第一個添加的,因此它是您正在配置的。它無法處理 的實例,CspReportRequest因為它有關于處理JsonPatchDocument<T>等的特定規則,因此它會傳遞到第二個JsonInputFormatter。正如我所提到的,第二個實例未配置為支持application/csp-report,因此它也無法處理該請求。


1如果您正在使用[ApiController],則不需要使用[FromBody],但您問題中的所有內容都表明您沒有使用[ApiController]。

2使用Last()notFirst()不一定是最好的方法,但它應該表明問題出在哪里。有很多方法可以獲取JsonInputFormatter您感興趣的具體信息。


查看完整回答
反對 回復 2023-07-09
?
侃侃爾雅

TA貢獻1801條經驗 獲得超16個贊

另一種選擇是讀取 Request.Body 來獲取報告。


不要忘記包含 Microsoft.AspNetCore.Mvc 命名空間。


[HttpPost]

public IActionResult Report()

{

    var report = "";


    using (var reader = new StreamReader(Request.Body))

    {

        report = reader.ReadToEnd();

    }

            

    _log.LogError("CSP violation: " + report);

    return Ok();

}

報告變量將包含 json 報告數據。


查看完整回答
反對 回復 2023-07-09
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

        .AddMvcOptions(options => {

            options.InputFormatters.OfType<NewtonsoftJsonInputFormatter>()

                .First(f => f.SupportedMediaTypes.Contains("application/json"))

                .SupportedMediaTypes.Add("application/csp-report");

        });

可能沒有,JsonInputFormatter但NewtonsoftJsonInputFormatter如果你使用.AddNewtonsoftJson()


另外,請注意第一個謂詞。關鍵是有幾個繼承自JsonInputFormatter(一個用于補?。┑母袷交绦?,并且您對已經支持的那個格式化程序感興趣application/json


查看完整回答
反對 回復 2023-07-09
  • 3 回答
  • 0 關注
  • 184 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號