簡體   English   中英

某些 Android 設備的防偽問題

[英]Anti forgery issue with some Android devices

我有一個使用防偽的 .NET Core 3.1.3 Web 應用程序。 在台式機和某些平板電腦上的 chrome 上一切正常。 它在帶有 Firefox 的 Android 設備上運行良好。 但是,在 Chrome 上,某些帶有 8.1 的 Android 設備對於啟用了防偽功能的任何 ajax 調用都會返回 400 錯誤。

一些代碼:

形式:

<form id="appForm" method="post" role="form">
    @Html.AntiForgeryToken(); 

控制器:

    [AllowAnonymous]
    [IgnoreAntiforgeryToken] // adding this to disable anti forgery makes the ajax call work
    //[DisableCors]
    [HttpPost]
    public async Task<JsonResult> AddProduct(int productId)
    {

阿賈克斯:

 $.ajax({
        url: "/Cart/AddProduct/",
        data: {
            __RequestVerificationToken: $("[name='__RequestVerificationToken']").val(),
            productId: $(this).data("productcode")
        },
        dataType: "json",
        type: "POST",

啟動文件

 services.AddAntiforgery(o =>
        {
            o.FormFieldName = "__RequestVerificationToken";
            o.HeaderName = "X-XSRF-TOKEN";
            //o.SuppressXFrameOptionsHeader = true;
            o.Cookie.SameSite = SameSiteMode.None;
            o.Cookie.Expiration = TimeSpan.FromDays(7);
        });

如果我通過將屬性[IgnoreAntiforgeryToken]添加到我的控制器來關閉防偽,那么 ajax 調用將在 Android 設備上運行。 否則返回 400 錯誤。

它適用於搭載 Android 9.* 的設備,但不適用於搭載 Android 8.1 的手機和平板電腦。

任何人都可以提出任何可能導致這種情況的建議嗎? 我沒有想法並且很快就禿頂了。

謝謝

注意:@Html.AntiForgeryToken() 的顯式使用不是必需的,因為 Core 將為任何具有 POST 方法的表單添加一個令牌。 但是我想嘗試明確添加它以查看它是否解決了問題。 唉,沒有。

結果證明這是cookie政策。 要修復,請在 startup.cs 中使用:

SameSiteMode.Unspecified;

未指定使用客戶端要求。 Chrome 一直在抱怨 Samesite = None。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM