Wed Dec 2019 1 year ago

Mengenal CSRF Protection Pada Laravel 5.8

#Introduction

Laravel memudahkan melindungi aplikasi Anda dari serangan lintas situs pemalsuan (CSRF). Pemalsuan permintaan lintas situs adalah jenis eksploit berbahaya di mana perintah yang tidak sah dilakukan atas nama pengguna yang diautentikasi.

Laravel secara otomatis menghasilkan "token" CSRF untuk setiap sesi pengguna aktif yang dikelola oleh aplikasi. Token ini digunakan untuk memverifikasi bahwa pengguna yang diautentikasi adalah yang benar-benar membuat permintaan ke aplikasi.

Setiap kali Anda mendefinisikan formulir HTML dalam aplikasi Anda, Anda harus menyertakan bidang token CSRF tersembunyi dalam formulir sehingga middleware perlindungan CSRF dapat memvalidasi permintaan. Anda dapat menggunakan @csrf arahan Blade untuk menghasilkan bidang token:

<form method="POST" action="/profile">
    @csrf
    ...
</form>

The VerifyCsrfToken middleware , yang termasuk dalam web kelompok middleware, otomatis akan memverifikasi bahwa token pada input permintaan cocok token disimpan dalam sesi.

 

JavaScript CSRF & Token

Saat membuat aplikasi yang digerakkan oleh JavaScript, akan lebih mudah untuk memiliki pustaka HTTP JavaScript Anda secara otomatis melampirkan token CSRF ke setiap permintaan keluar. Secara default, file mendaftarkan nilai tag meta dengan perpustakaan HTTP Axios. Jika Anda tidak menggunakan perpustakaan ini, Anda harus mengkonfigurasi perilaku ini secara manual untuk aplikasi Anda. resources/js/bootstrap.jscsrf-token

 

#Excluding URIs From CSRF Protection

Terkadang Anda mungkin ingin mengecualikan serangkaian URI dari perlindungan CSRF. Misalnya, jika Anda menggunakan Stripe untuk memproses pembayaran dan menggunakan sistem webhook mereka, Anda harus mengecualikan route handhook handler Stripe Anda dari perlindungan CSRF karena Stripe tidak akan tahu apa tanda CSRF untuk dikirim ke rute Anda.

Biasanya, Anda harus menempatkan rute semacam ini di luar webgrup middleware yang RouteServiceProvider berlaku untuk semua route dalam file. Namun, Anda juga dapat mengecualikan rute dengan menambahkan URI mereka ke properti middleware: routes/web.php$exceptVerifyCsrfToken

<?php

namespace AppHttpMiddleware;

use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}

 

#X-CSRF-TOKEN

Selain memeriksa token CSRF sebagai parameter POST, VerifyCsrfToken middleware juga akan memeriksa header permintaan. Misalnya, Anda dapat menyimpan token dalam tag HTML :X-CSRF-TOKENmeta

<meta name="csrf-token" content="{{ csrf_token() }}">

Kemudian, setelah Anda membuat meta tag, Anda dapat menginstruksikan perpustakaan seperti jQuery untuk secara otomatis menambahkan token ke semua header permintaan. Ini memberikan perlindungan CSRF yang sederhana dan nyaman untuk aplikasi berbasis AJAX Anda:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

 

 
Secara default, file mendaftarkan nilai tag meta dengan perpustakaan HTTP Axios. Jika Anda tidak menggunakan perpustakaan ini, Anda harus mengkonfigurasi perilaku ini secara manual untuk aplikasi Anda. resources/js/bootstrap.jscsrf-token

 

#X-XSRF-TOKEN

Laravel menyimpan token CSRF saat ini dalam cookie yang disertakan dengan setiap respons yang dihasilkan oleh kerangka kerja. Anda dapat menggunakan nilai cookie untuk mengatur tajuk permintaan. XSRF-TOKENX-XSRF-TOKEN

Cookie ini terutama dikirim sebagai kenyamanan karena beberapa kerangka kerja JavaScript dan perpustakaan, seperti Angular dan Axios, secara otomatis menempatkan nilainya di header. X-XSRF-TOKEN

tutorial laravel belajar laravel csrf protection laravel