Jadual Kandungan
前文
方法一
方法二
修改CSRF的cookie名称方法
Rumah php教程 php手册 [PHP] - Laravel - CSRF token禁用方法

[PHP] - Laravel - CSRF token禁用方法

Jun 14, 2016 am 12:02 AM
csrf laravel php token kod Sumber terbuka pengaturcaraan bahasa pengaturcaraan pembangunan perisian

前文

CSRF攻击和漏洞的参考文章:

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

 

Laravel默认是开启了CSRF功能,需要关闭此功能有两种方法:

 


 

方法一

打开文件:app\Http\Kernel.php

把这行注释掉:

'App\Http\Middleware\VerifyCsrfToken'
Salin selepas log masuk

 

方法二

打开文件:app\Http\Middleware\VerifyCsrfToken.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>
Salin selepas log masuk

 

CSRF的使用有两种,一种是在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>
Salin selepas log masuk

另一种是使用cookie方式。

使用cookie方式,需要把app\Http\Middleware\VerifyCsrfToken.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>
Salin selepas log masuk

使用cookie方式的CSRF,可以不用在每个页面都加入这个input的hidden标签。

 

当然,也可以对指定的表单提交方式使用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>
Salin selepas log masuk

只对GET的方式提交使用CSRF,对POST方式提交表单禁用CSRF


 

 

修改CSRF的cookie名称方法

通常使用CSRF时,会往浏览器写一个cookie,如:

要修改这个名称值,可以到打开这个文件:vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php

找到”XSRF-TOKEN“,修改它即可。

当然,你也可以在app\Http\Middleware\VerifyCsrfToken.php文件中,重写addCookieToResponse(...)方法做到。


 

 

另外,如需要对指定的页面不使用CSRF,可以参考如下文章:

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

 

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1664
14
Tutorial PHP
1269
29
Tutorial C#
1249
24
Apa yang berlaku jika session_start () dipanggil beberapa kali? Apa yang berlaku jika session_start () dipanggil beberapa kali? Apr 25, 2025 am 12:06 AM

Pelbagai panggilan ke session_start () akan menghasilkan mesej amaran dan kemungkinan penggantian data. 1) PHP akan mengeluarkan amaran, menyebabkan sesi telah dimulakan. 2) Ia boleh menyebabkan penggantian data sesi yang tidak dijangka. 3) Gunakan session_status () untuk memeriksa status sesi untuk mengelakkan panggilan berulang.

Masa Depan C: Adaptasi dan Inovasi Masa Depan C: Adaptasi dan Inovasi Apr 27, 2025 am 12:25 AM

Masa depan C akan memberi tumpuan kepada pengkomputeran selari, keselamatan, modularization dan pembelajaran AI/mesin: 1) Pengkomputeran selari akan dipertingkatkan melalui ciri -ciri seperti coroutine; 2) keselamatan akan diperbaiki melalui pemeriksaan jenis dan mekanisme pengurusan memori yang lebih ketat; 3) modulasi akan memudahkan organisasi dan penyusunan kod; 4) AI dan pembelajaran mesin akan mendorong C untuk menyesuaikan diri dengan keperluan baru, seperti pengkomputeran berangka dan sokongan pengaturcaraan GPU.

Komposer: Membantu pembangunan PHP melalui AI Komposer: Membantu pembangunan PHP melalui AI Apr 29, 2025 am 12:27 AM

AI boleh membantu mengoptimumkan penggunaan komposer. Kaedah khusus termasuk: 1. Pengoptimuman Pengurusan Ketergantungan: AI menganalisis kebergantungan, mengesyorkan kombinasi versi terbaik, dan mengurangkan konflik. 2. Generasi Kod Automatik: AI menjana fail komposer.json yang sesuai dengan amalan terbaik. 3. Meningkatkan Kualiti Kod: AI mengesan masalah yang berpotensi, memberikan cadangan pengoptimuman, dan meningkatkan kualiti kod. Kaedah ini dilaksanakan melalui pembelajaran mesin dan teknologi pemprosesan bahasa semulajadi untuk membantu pemaju meningkatkan kecekapan dan kualiti kod.

Apa versi pangkalan data yang serasi dengan Laravel terkini? Apa versi pangkalan data yang serasi dengan Laravel terkini? Apr 25, 2025 am 12:25 AM

Versi terbaru Laravel10 bersesuaian dengan MySQL 5.7 dan ke atas, PostgreSQL 9.6 dan ke atas, SQLite 3.8.8 dan ke atas, SQLServer 2017 dan ke atas. Versi ini dipilih kerana mereka menyokong ciri -ciri ORM Laravel, seperti jenis data JSON MySQL5.7, yang meningkatkan kecekapan pertanyaan dan penyimpanan.

Apakah kepentingan fungsi session_start ()? Apakah kepentingan fungsi session_start ()? May 03, 2025 am 12:18 AM

session_start () iscrucialinphpformanaginguserSessions.1) itinitiatesanewsessionifnoneexists, 2) resumeSanexistingsession, dan3) setSasessionCookieforcontinuityAcrossrequests, enableingApplicationeUseUshenticationandPersonalConizedConizedContentContentContentContentContentContentContentContentContentContentContentC.

Apakah perbezaan antara kerangka php laravel dan yii Apakah perbezaan antara kerangka php laravel dan yii Apr 30, 2025 pm 02:24 PM

Perbezaan utama antara Laravel dan Yii adalah konsep reka bentuk, ciri -ciri fungsional dan senario penggunaan. 1. Laravel memberi tumpuan kepada kesederhanaan dan keseronokan pembangunan, dan menyediakan fungsi yang kaya seperti alat eloquentorm dan artisan, sesuai untuk pembangunan dan pemula yang pesat. 2.YII menekankan prestasi dan kecekapan, sesuai untuk aplikasi beban tinggi, dan menyediakan sistem Activerecord dan cache yang cekap, tetapi mempunyai lengkung pembelajaran yang curam.

Di sebalik tabir: Apa bahasa JavaScript? Di sebalik tabir: Apa bahasa JavaScript? Apr 28, 2025 am 12:01 AM

JavaScript berjalan dalam penyemak imbas dan persekitaran Node.js dan bergantung pada enjin JavaScript untuk menghuraikan dan melaksanakan kod. 1) menjana pokok sintaks abstrak (AST) di peringkat parsing; 2) menukar AST ke bytecode atau kod mesin dalam peringkat penyusunan; 3) Laksanakan kod yang disusun dalam peringkat pelaksanaan.

H5: Penambahbaikan utama dalam HTML5 H5: Penambahbaikan utama dalam HTML5 Apr 28, 2025 am 12:26 AM

HTML5 membawa lima penambahbaikan utama: 1. Tag semantik meningkatkan kejelasan kod dan kesan SEO; 2. Sokongan multimedia memudahkan penyembuhan video dan audio; 3. Peningkatan Borang Memudahkan Pengesahan; 4. Offline dan storan tempatan meningkatkan pengalaman pengguna; 5. Fungsi kanvas dan grafik meningkatkan visualisasi laman web.

See all articles