zoukankan      html  css  js  c++  java
  • HTTP层 —— CSRF保护

     

    简介

    跨站请求伪造是一种通过伪装授权用户的请求来利用授信网站的恶意漏洞。Laravel 使得防止应用遭到跨站请求伪造攻击变得简单。

    Laravel 自动为每一个被应用管理的有效用户会话生成一个 CSRF “令牌”,该令牌用于验证授权用户和发起请求者是否是同一个人。

    任何时候在 Laravel 应用中定义HTML表单,都需要在表单中引入CSRF令牌字段,这样CSRF保护中间件才能够正常验证请求。想要生成包含 CSRF 令牌的隐藏输入字段,可以使用辅助函数 csrf_field 来实现:

    <form method="POST" action="/profile">
        {{ csrf_field() }}
        ...
    </form>
    

    中间件组 web 中的中间件VerifyCsrfToken 会自动为我们验证请求输入的 token 值和 Session 中存储的 token 是否一致。

    从 CSRF 保护中排除指定 URL

    有时候我们需要从 CSRF 保护中排除一些 URL,例如,如果你使用了 Stripe 来处理支付并用到他们的 webhook 系统,这时候就需要从 Laravel 的 CSRF 保护中排除  webhook 处理器路由,因为Stripe并不知道要传什么token值给我们定义的路由。

    通常我们需要将这种类型的路由放到文件 routes/web.php 里,中间件组 web 之外。此外,你也可以在 VerifyCsrfToken 中间件中将要排除的 URL 添加到 $except 属性数组:

    <?php
    
    namespace AppHttpMiddleware;
    
    use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as BaseVerifier;
    
    class VerifyCsrfToken extends BaseVerifier
    {
        /**
         *从CSRF验证中排除的URL
         *
         * @var array
         */
        protected $except = [
            'stripe/*',
        ];
    }
    
    X-CSRF-Token

    除了将 CSRF 令牌作为 POST 参数进行验证外,还可以通过设置 X-CSRF-Token 请求头来实现验证,VerifyCsrfToken 中间件会检查 X-CSRF-TOKEN 请求头,首先创建一个 meta 标签并将令牌保存到该 meta 标签:

    <meta name="csrf-token" content="{{ csrf_token() }}">
    

    然后在 js 库(如 jQuery)中添加该令牌到所有请求头,这为基于 AJAX 的应用提供了简单、方便的方式来避免 CSRF 攻击:

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    
    X-XSRF-Token

    Laravel 还会将 CSRF 令牌保存到名为 XSRF-TOKEN 的 Cookie 中,你可以使用该 Cookie 值来设置 X-XSRF-TOKEN请求头。一些 JavaScript 框架,比如  Angular,会为你自动进行设置,基本上你不太需要手动设置这个值。

  • 相关阅读:
    09 图书管理系统(SSM+LayUi)
    06 图书管理系统(SSM+LayUi)
    05 图书管理系统(SSM+LayUi)
    04 图书管理系统(SSM+LayUi)
    在使用IDEA创建SpringBoot的时候出现了Initialization failed for 'https://start.spring.io’Please check URL, network and proxy settings.的错误
    给项目添加Tomcat时找不到项目
    11 图书管理系统(SSM+LayUi)
    SNE降维与可视化
    非线性模型的回归和分类问题——决策树
    从线性回归到逻辑回归
  • 原文地址:https://www.cnblogs.com/zhengyanbin2016/p/6005040.html
Copyright © 2011-2022 走看看