Laravel5.0 CSRFチェックを無効化(修改後可以像5.1以上那樣從CSRF保護中排除指定URL)

來源:互聯網
上載者:User

標籤:return   hand   disable   ons   route   his   排除   cad   5.0   

Laravel5では全てのPOSTに勝手にCSRFチェックが付いてきます。
便利と言えば便利ですが、Laravel外からのPOSTを受け取りたいときなど大迷惑です。

CSRFチェックを排除する方法が何故かなかなか見當たらなかったので調査結果を記載。

Kernel

デフォルトで適用されるミドルウェアは
app/Http/Kernel.php
に記載されています。
‘App\Http\Middleware\VerifyCsrfToken‘
が書かれている行を削除するとCSRFチェックが無効化されます。

この場合、あらゆるフォームに対してCSRFチェックが無くなります。
特定のフォームに対して有効にしたい場合、コントローラのコンストラクタに

$this->middleware(‘App\Http\Middleware\VerifyCsrfToken‘); 

と書けば、そのコントローラでは有効になります。

しかし、各メソッド內に書いても効かないようです。
つまり、同一コントローラ內のフォームAには有効に、フォームBには無効にしたいといったことができません。

さらにデフォルトが危険側に倒れるため、この設定は微妙。

VerifyCsrfToken

CSRFチェックの本體は
app/Http/Middleware/VerifyCsrfToken.php
です。
ここにCSRFチェックを無効にしたいフォームを記載することでどうにかします。

デフォルトのVerifyCsrfToken::handle()は

    public function handle($request, Closure $next){        return parent::handle($request, $next);    }

とだけ書かれていましたが、ここを変更。

    // CSRFを除外したいURLリスト    protected $routes = [        ‘hoge/fuga‘,        ‘foo/bar‘,        ‘baz/qux‘,    ];    // handleを変更    public function handle($request, Closure $next){        if($this->excludedRoutes($request)){            return $this->addCookieToResponse($request, $next($request));        }        return parent::handle($request, $next);    }    /*    * CSRFを除外したいURLであるかどうかをチェックする。    * @param Request リクエスト    * @return boolean CSRFを除外したいURLであればtrue    **/    protected function excludedRoutes($request){        foreach($this->routes as $route){            if ($request->is($route)){ return true; }        }    }

これで特定URLだけCSRFチェックを外すことができました。

一部のフォームを操作したいだけなのに、いちいち全體に影響のあるファイルを変更しないといけないのが微妙。

コントローラ
    HogeController::postForm(){        $this->disableMiddleware(‘App\Http\Middleware\VerifyCsrfToken‘);    }

みたいなことはできんのか?

 

 

http://www.camroncade.com/disable-csrf-for-specific-routes-laravel-5/


這種問題只能用vpn查

Laravel5.0 CSRFチェックを無効化(修改後可以像5.1以上那樣從CSRF保護中排除指定URL)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.