検索
ホームページphp教程php手册【PHP】 - Laravel - CSRFトークン無効化方法

【PHP】 - Laravel - CSRFトークン無効化方法

Jun 14, 2016 am 12:02 AM
csrflaravelphptokenコードオープンソースプログラミングプログラミング言語ソフトウェア開発

前の記事

CSRF 攻撃と脆弱性に関する参考記事:

http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

Laravel ではデフォルトで CSRF 機能が有効になっています。この機能をオフにする方法は 2 つあります。


方法 1

ファイルを開く: appHttpKernel.php

次の行をコメントアウトします:

'App\Http\Middleware\VerifyCsrfToken'

方法 2

ファイルを開きます: appHttpMiddlewareVerifyCsrfToken.php

は次のように変更されました:

<span style="color: #000000;">php namespace App\Http\Middleware;

</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> Closure;
</span><span style="color: #0000ff;">use</span> Illuminate\Foundation\Http\Middleware\VerifyCsrfToken <span style="color: #0000ff;">as</span><span style="color: #000000;"> BaseVerifier;

</span><span style="color: #0000ff;">class</span> VerifyCsrfToken <span style="color: #0000ff;">extends</span><span style="color: #000000;"> BaseVerifier {

    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     </span><span style="color: #008000;">*/</span>
    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> handle(<span style="color: #800080;">$request</span>, Closure <span style="color: #800080;">$next</span><span style="color: #000000;">)
    {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> 使用CSRF
        //return parent::handle($request, $next);
        // 禁用CSRF</span>
        <span style="color: #0000ff;">return</span> <span style="color: #800080;">$next</span>(<span style="color: #800080;">$request</span><span style="color: #000000;">);
    }

}</span>

CSRF を使用するには 2 つの方法があります。1 つは HTML コードに追加する方法です。

<span style="color: #0000ff;"><span style="color: #800000;">input </span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="hidden"</span><span style="color: #ff0000;"> name</span><span style="color: #0000ff;">="_token"</span><span style="color: #ff0000;"> value</span><span style="color: #0000ff;">="{{ csrf_token() }}"</span> <span style="color: #0000ff;">/></span></span>

もう 1 つは Cookie を使用することです。

Cookie メソッドを使用するには、appHttpMiddlewareVerifyCsrfToken.php を次のように変更する必要があります:

<span style="color: #000000;">php namespace App\Http\Middleware;

</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> Closure;
</span><span style="color: #0000ff;">use</span> Illuminate\Foundation\Http\Middleware\VerifyCsrfToken <span style="color: #0000ff;">as</span><span style="color: #000000;"> BaseVerifier;

</span><span style="color: #0000ff;">class</span> VerifyCsrfToken <span style="color: #0000ff;">extends</span><span style="color: #000000;"> BaseVerifier {

    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     </span><span style="color: #008000;">*/</span>
    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> handle(<span style="color: #800080;">$request</span>, Closure <span style="color: #800080;">$next</span><span style="color: #000000;">)
    {
        </span><span style="color: #0000ff;">return</span> parent::addCookieToResponse(<span style="color: #800080;">$request</span>, <span style="color: #800080;">$next</span>(<span style="color: #800080;">$request</span><span style="color: #000000;">));
    }

}</span>

Cookie ベースの CSRF を使用すると、この入力の隠しタグをすべてのページに追加する必要がありません。

もちろん、次のような指定されたフォーム送信方法に CSRF を使用することもできます。

<span style="color: #000000;">php namespace App\Http\Middleware;

</span><span style="color: #0000ff;">use</span><span style="color: #000000;"> Closure;
</span><span style="color: #0000ff;">use</span> Illuminate\Foundation\Http\Middleware\VerifyCsrfToken <span style="color: #0000ff;">as</span><span style="color: #000000;"> BaseVerifier;

</span><span style="color: #0000ff;">class</span> VerifyCsrfToken <span style="color: #0000ff;">extends</span><span style="color: #000000;"> BaseVerifier {

    </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     </span><span style="color: #008000;">*/</span>
    <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span> handle(<span style="color: #800080;">$request</span>, Closure <span style="color: #800080;">$next</span><span style="color: #000000;">)
    {
        </span><span style="color: #008000;">//</span><span style="color: #008000;"> Add this:</span>
        <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$request</span>->method() == 'POST'<span style="color: #000000;">)
        {
            </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$next</span>(<span style="color: #800080;">$request</span><span style="color: #000000;">);
        }
        
        </span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$request</span>->method() == 'GET' || <span style="color: #800080;">$this</span>->tokensMatch(<span style="color: #800080;">$request</span><span style="color: #000000;">))
        {
            </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$next</span>(<span style="color: #800080;">$request</span><span style="color: #000000;">);
        }
        </span><span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span><span style="color: #000000;"> TokenMismatchException;
    }

}</span>

GET 送信には CSRF のみを使用し、POST 送信には CSRF を無効にします


CSRF Coo​​kie 名を変更する方法

通常、CSRF を使用すると、次のような Cookie がブラウザに書き込まれます。

この名前の値を変更するには、次のファイルを開くことができます:vendorlaravelframeworksrcIlluminateFoundationHttpMiddlewareVerifyCsrfToken.php

「XSRF-TOKEN」を見つけて変更します。

もちろん、appHttpMiddlewareVerifyCsrfToken.php ファイルの addCookieToResponse(...) メソッドをオーバーライドすることもできます。


また、特定のページで CSRF を使用する必要がない場合は、次の記事を参照してください:

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

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール