zoukankan      html  css  js  c++  java
  • Blazor WebAssembly中的防止跨站点请求伪造 (XSRF/CSRF) 攻击

      这里以Asp.net Core的服务端并且Asp.net Core托管客户端为例,跨域请求的参考其他跨域设置。

      在Asp.net Core中,XSRF/CSRF是通过验证http头或form表单中的字段来验证请求的。

      在Asp.net Core的Startup中注入如下服务以启用防止跨站点请求伪造 (XSRF/CSRF) 攻击

                services.AddAntiforgery(options =>{ options.HeaderName = "X-CSRF-TOKEN-HEADER"; options.FormFieldName = "X-CSRF-TOKEN-FORM"; });

      启用如下中间件以在Cookie中写入令牌

    app.Use(next=>context=> 
                {
                    var tokens = antiforgery.GetAndStoreTokens(context);
                    context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,new CookieOptions() {HttpOnly=false });
                    return next(context);
                });

      在Blazor WebAssembly 客户端中注入JSRuntime用于通过js读取Cookie

    @inject IJSRuntime JSRuntime

      在FORM表单中附加令牌

      var token = await JSRuntime.InvokeAsync<string>("getCookie", "XSRF-TOKEN");
    
            //FORM
            HttpContent httpcontent = new StringContent($"X-CSRF-TOKEN-FORM={token}", System.Text.Encoding.UTF8);
            httpcontent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded");
    
            using HttpResponseMessage responseMessage = await Http.PostAsync("WeatherForecast", httpcontent);
            forecasts = await JsonSerializer.DeserializeAsync<WeatherForecast[]>(await responseMessage.Content.ReadAsStreamAsync());

      在Header中附加令牌

       //HEADER
            Http.DefaultRequestHeaders.Add("X-CSRF-TOKEN-HEADER", token);
            forecasts = await Http.PostJsonAsync<WeatherForecast[]>("WeatherForecast", httpcontent);

    参考:https://docs.microsoft.com/zh-cn/aspnet/core/security/anti-request-forgery?view=aspnetcore-3.1#javascript-ajax-and-spas

    源码:https://github.com/saber-wang/BlazorAppFormTset

  • 相关阅读:
    HDU 4901 The Romantic Hero
    COGS8 备用交换机
    POJ 1466 Girls and Boys
    bzoj3442 学习小组
    bzoj2054 疯狂的馒头
    POJ2135 Farm Tour
    POJ 1149 PIGS
    Html5 Canvas学习之路(五)
    关于跨域简单总结
    vue-baidu-map 进入页面自动定位的解决方案!
  • 原文地址:https://www.cnblogs.com/nasha/p/12467572.html
Copyright © 2011-2022 走看看