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;
        }
  • 相关阅读:
    EL表达式 (详解)
    宜信面试整理
    Java 合并两个排序数组
    动态规划初识(爬楼梯问题)
    二叉树的最小深度
    ElasticSearch 单字符串多字段查询评分问题
    ES 分词
    汽车之家 面试总结
    浪潮之巅读书笔记
    闲徕互娱 面试总结
  • 原文地址:https://www.cnblogs.com/wanghaokun/p/10011668.html
Copyright © 2011-2022 走看看