【问题标题】:#laravel 419 error appear submission of any form this problem only on GoDaddy hosting on other hosting app works fine#laravel 419 错误出现提交任何形式此问题仅在其他托管应用程序上的 GoDaddy 托管上工作正常
【发布时间】:2019-09-29 10:05:50
【问题描述】:

这是我遇到的 419 错误的模式

  • 登录应用程序
  • 注销
  • 再次登录
  • 再次登出出现419错误

登录后,当我点击任何链接(调用路由)时,发生 419,尤其是当我尝试删除任何记录时,会出现此错误,根据我在此错误期间的发现,我意识到会话中的每个表单提交令牌存储已更新,但在表单提交请求中作为隐藏字段传递的令牌未更新,这是导致令牌不匹配的原因

我做了什么来解决这个问题?

目前我正在使用 laravel 5.7.28 版本,我尝试在其他共享主机应用程序上使用相同的应用程序工作正常。
我只在 GoDaddy 主机上遇到 419 以下是我解决问题但没有取得丰硕成果的步骤

1.

我注释掉

    //      \App\Http\Middleware\VerifyCsrfToken::class,

从 kernel.php 419 错误消失,但是通过在登录后单击任何我在登录屏幕上重定向的链接时执行此操作意味着会话被破坏

2.

我也重新生成了应用密钥

    APP_KEY=base64:8NYbcWPkEaj5oVHEGBWxCaFVHQhkgA/OOZyFPBiDMYQ=

3.

在 session.php 文件中

    'http_only' => false,

4.

会话在 storage/framework/session.php 中正确记录,我分配权限 777

5.

在此处输入代码

然后我尝试手动调试会话

    vendor/laravel/framework/src/Illuminate\Foundation\Http\Middleware


    public function handle($request, Closure $next)
        {
    
     echo "<pre>";
            print_r($this->getTokenFromRequest($request));
            echo "</pre>";
    
    
            echo "<pre>";
            print_r($request->session()->token());
     echo "</pre>";
    die()
            if (
                $this->isReading($request) ||
                $this->runningUnitTests() ||
                $this->inExceptArray($request) ||
                $this->tokensMatch($request)
            ) {
                return tap($next($request), function ($response) use 
       ($request) {
                    if ($this->shouldAddXsrfTokenCookie()) {
                        $this->addCookieToResponse($request, $response);
                    }
                });
            }
    
            throw new TokenMismatchException;
        }


csrf 令牌存储在会话中并在每次提交表单时更新


    $request->session()->token();

但表单提交中的令牌存储 $request 保持不变/静态不会更改/更新


    $this->getTokenFromRequest($request);

这实际上是令牌不匹配的原因,它以错误 419 的形式引发异常

6.


在每个表单上正确使用@scrf 令牌,我还替换了 {{csrf_filed() }}


7.

同时运行 composer update 命令

8.

在不同的浏览器上运行应用程序

9.

注释掉

    //\App\Http\Middleware\VerifyCsrfToken::class in \app\Http\Kernel.php

当我提交上面的文件 419 消失但当我点击任何链接会话被破坏时,注销并返回登录页面 注释掉

     //\Illuminate\Session\Middleware\AuthenticateSession::class 


\app\Http\Kernel.php

.env 文件代码


    APP_NAME=Laravel
    APP_ENV=local
    APP_KEY=base64:8NYbcWPkEaj5oVHEGBWxCaFVsQhkgA/OOZyFPBiDMYQ=
    APP_DEBUG=true
    APP_URL=http://localhost
    
    LOG_CHANNEL=stack
    
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=ltcsar
    DB_USERNAME=root
    DB_PASSWORD=
    
    BROADCAST_DRIVER=log
    CACHE_DRIVER=file
    QUEUE_CONNECTION=sync
    SESSION_DRIVER=file
    SESSION_LIFETIME=120
    
    REDIS_HOST=127.0.0.1
    REDIS_PASSWORD=null
    REDIS_PORT=6379+
    
    MAIL_DRIVER=smtp
    MAIL_HOST=smtp.mailtrap.io
    MAIL_PORT=2525
    MAIL_USERNAME=null
    MAIL_PASSWORD=null
    MAIL_ENCRYPTION=null
    
    PUSHER_APP_ID=
    PUSHER_APP_KEY=
    PUSHER_APP_SECRET=
    PUSHER_APP_CLUSTER=mt1
    
    MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
    MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

【问题讨论】:

    标签: php laravel security web web-hosting


    【解决方案1】:

    我也遇到过同样的问题,是 laravel 5.7.2 的问题,我已经安装了 framework v 5.7.9,问题就会消失。

    【讨论】:

      【解决方案2】:

      前往

      app\Http\Middleware\TrustProxies.php

      update protected $proxies; --> protected $proxies = '*';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-04
        • 1970-01-01
        • 2020-10-31
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 2019-04-08
        • 1970-01-01
        相关资源
        最近更新 更多