Cross Site Request Forgery (CSRF) Security pada Slim Framework 3

Dari sisi keamanan, saya akan membahas tentang CSRF (baca: si-surf) pada Slim Framework 3 (Slim). Saat installasi Slim, tidak ada package security untuk CSRF, akan tetapi ada pada repo terpisah di github.

Tulisan ini adalah tulisan ke sekian dari seri Slim, ada baiknya Anda membaca tulisan saya yang sebelumnya seperti Installasi Slim Framework 3.

Hal yang pertama kita lakukan adalah menginstall skeleton Slim dari akrabat.

Kemudian install package Slim CSRF

Tambahkan kode di bawah ini pada file app/dependencies.php

Jika Anda belum mengerti, silakan baca tulisan saya mengenai dependency injection, DIC pada Slim Framework 3.

Sehingga file app/dependencies.php menjadi seperti di bawah ini:

Selanjutnya buka file app/middleware.php dan tambahkan kode ini:

Jika Anda masih kebingungan menggunakan middleware, tulisan saya akan mampu memberikan pengertian lebih lanjut, Slim Framework 3 Middleware.

Sekarang kita menuju ke route. Kita akan membuat “/test-csrf” untuk menampilkan form, dan “/csrf-submit” jika form sukses. Jika gagal maka akan menampilkan pesan “Failed CSRF check!“.

Buka app/routes.php lalu tambahkan code ini:

Untuk view, kita membuat file ‘csrf.html‘ pada app/templates, yang isinya

Kemudian akses project melalui browser.

Register per Route

Ada kalanya tidak semua route akan kita amankan, jadi hanya sebagaian saja route saja yang menggunakan.

Hapus pada line code di bawah ini pada app/middleware.php

Lalu tambahkan middleware pada app/routes.php

Penanganan kesalahan pada saat validasi

Secara default, Slim\Csrf\Guard akan mengembalikan Respon dengan status code 400 dan pesan error yang sederhana. Untuk membuat pesan error sesuai dengan keinginan, kita harus membuat callable melalui setFailureCallable(). Parameter ini sama dengan middleware: function($request, $response, $next) dan harus mengembalikan Response object.

Contohnya seperti di bawah ini:

Code di atas adalah kita mengganti container untuk csrf, dengan memberikan callable pada function setFailureCallable dan mengembalikan nilai Response.

Lalu saat validasi gagal tampilkan pesan csrf_message seperti di bawah ini:

 

9 thoughts on “Cross Site Request Forgery (CSRF) Security pada Slim Framework 3”

  1. Manteb gan, ane bikin CSRF nya di middlewae untuk semua route, tujuannya biar ga usah capek2 lagi nulis code yang sama di banyak route

    $app->add(function (Request $req, Response $res, callable $next) {
    $req = $this->csrf->generateNewToken($req);

    [/crayon]

    });

    Tapi kok ya malah sering not valid CSRF tokennya -_-

    1. Gak perlu dipanggil bro, karena udah jalan otomatis pas middleware dijalanin:

        1. ini di dependency gan

          ini di middleware gan

Leave a Reply