zoukankan      html  css  js  c++  java
  • .net core 一个避免跨站请求的中间件

    前提:

          前几天看到博客园首页中有这么一篇文章:跨站请求伪造(CSRF),刚好前段时间自己一直也在搞这个东西,后来觉得每次在form表单里添加一个@Html.AntiForgeryToken,在对应的方法上添加特性[ValidateAntiForgeryToken],很是麻烦,于是自己动手写了一个全局的中间件,只要是post请求就会生成一个表单验证的token。

            话不多说,上代码;

          核心代码:

     1     public class GlobalValidateMiddleTool
     2     {
     3         private RequestDelegate _requestDelete;
     4         private IAntiforgery _antiforgery;
     5         public GlobalValidateMiddleTool(RequestDelegate requestDelegate,IAntiforgery antiforgery)
     6         {
     7             _requestDelete = requestDelegate;
     8             _antiforgery = antiforgery;
     9         }
    10         public async Task Invoke(HttpContext context)
    11         {
    12             if (context.Request.Method.ToLower() == "post")
    13             {
    14                 await _antiforgery.ValidateRequestAsync(context);
    15             }
    16             await _requestDelete(context);
    17         }
    18     }

    一个拓展方法:

    1     public static class IapplicationExt
    2     {
    3         public static IApplicationBuilder UseGlobalTokenValidate(this IApplicationBuilder app)
    4         {
    5             return app.UseMiddleware<GlobalValidateMiddleTool>();
    6         }
    7     }

    使用方法:

    app.UseGlobalTokenValidate();

    验证一下,写了一个form表单

    <form asp-action="about" method="post">
        <input type="text" id="data" name="data" />
        <input type="submit" value="test" />
    </form>

    对应的action 

            [HttpPost]
            public IActionResult About(string data)
            {
                if (ModelState.IsValid)
                {
                    return Json(data);
                }
                return NotFound();
            }

    界面:

    表单中填写test 点击提交按钮

     返回结果:

    这样就表示我们的这个中间件生效了。

  • 相关阅读:
    SaveFileDialog控件
    OpenFileDialog组件打开文件....待续
    零碎笔记集合......
    Environment 类
    StatusStrip状态栏控件
    NotifyIcon制作任务栏托盘菜单
    ContextMenuStrip控件
    object sender ,EventArs e
    MenuItem
    TabControl控件
  • 原文地址:https://www.cnblogs.com/qulianqing/p/7757728.html
Copyright © 2011-2022 走看看