zoukankan      html  css  js  c++  java
  • laravel之伪造跨站请求保护CSRF实现机制

    Laravel 提供了简单的方法使你的应用免受 跨站请求伪造 (CSRF) 的袭击。跨站请求伪造是一种恶意的攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令。

    Laravel 为每个活跃用户的 Session 自动生成一个 CSRF 令牌。该令牌用来核实应用接收到的请求是通过身份验证的用户出于本意发送的。

    任何情况下在你的应用程序中定义 HTML 表单时都应该包含 CSRF 令牌隐藏域,这样 CSRF 保护中间件才可以验证请求。

    CSRF代码实现逻辑:

    位置:vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php

    获取session中XSRF-TOKEN的值与提交token比较

    code:

    /**
         * Determine if the session and input CSRF tokens match.
         *
         * @param  IlluminateHttpRequest  $request
         * @return bool
         */
        protected function tokensMatch($request)
        {
            $token = $this->getTokenFromRequest($request);
    
            return is_string($request->session()->token()) &&
                   is_string($token) &&
                   hash_equals($request->session()->token(), $token);
        }
    
        /**
         * Get the CSRF token from the request.
         *
         * @param  IlluminateHttpRequest  $request
         * @return string
         */
        protected function getTokenFromRequest($request)
        {
            $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');
    
            if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
                $token = $this->encrypter->decrypt($header);
            }
    
            return $token;
        }
  • 相关阅读:
    使用MyBatis生成插件
    关联源码及日志
    下载依赖
    框架简介及基本使用
    注解的本质 及 反射读取属性值
    元注解
    广告系统学习笔记(一)
    Nginx学习笔记(三)
    Nginx学习笔记(二)
    Nginx学习笔记(一)
  • 原文地址:https://www.cnblogs.com/wanghaokun/p/10011668.html
Copyright © 2011-2022 走看看