# CSRF

**Cross-Site Request Forgery** salah satu jenis serangan yang masih sering ditemukan hingga saat ini.

## Apa itu CSRF?

**Cross-Site Request Forgery** dikenal juga dengan nama *one click attack* atau *session riding* dan biasa disingkat menjadi **CSRF** atau **XSRF**, merupakan jenis ekploitasi berbahaya dari sebuah website di mana perintah yang tidak sah ditransmisikan dari pengguna yang dipercaya oleh aplikasi web.

Mudahnya, serangan CSRF ini **menipu** situs web dengan cara **penyerang membuat&#x20;*****request*****&#x20;yang seolah-olah&#x20;*****request*****&#x20;tersebut berasal dari user yang dipercaya (korban)**.

Serangan bekerja melalui link atau *script* pada halaman web yang diakses oleh user. Link tersebut dapat berupa gambar yang terhubung ke website tertentu.&#x20;

Jika browser victim menyimpan informasi otentikasi dalam sebuah *cookie* yang belum *expire*, maka dengan mengklik ke link tersebut akan menyebabkan website diakses menggunakan *cookie* victim yang melakukan klik. Dengan kata lain, penyerang menipu browser user untuk mengirimkan *HTTP request* ke website target.

## Pengetahuan yang Harus Dimiliki

Ada 2 pengetahuan yang sangat penting menurut saya untuk melakukan CSRF ini, yaitu:

1. Pengetahuan tentang *HTTP request*,
2. Dan *client-side scripting* seperti JavaScript dan HTML.

## Bagaimana Cara Mengatasi CSRF?

Untuk meminimalisir dampak dari celah keamanan CSRF, developer bisa melakukan beberapa pencegahan dibawah ini:

* Website beralih dari metoda *persistent authentication* (menggunakan otentikasi dengan *cookie* atau HTTP) ke metoda *transient authentication* (menggunakan *hidden field* oleh setiap form).
* Menyertakan token *user-specific* rahasia yang ditambahkan ke *cookie*.
* Meskipun CSRF pada dasarnya adalah masalah dengan aplikasi web, user dapat membantu melindungi *account*-nya dengan logoff site sebelum mengunjungi yang lain atau membersihkan cookie browsernya pada akhir session browser.
* Menggunakan SSL (*Secure Socket Layer*) and TLS (*Transport Layer Security*) *encryption* ketika berurusan dengan data yang *sensitive*.
* Setting dan *restrict security* terkait *HTTP Header*, diantaranya Mengatur **Content-Security-Policy**, Menonaktifkan **X-Powered-By**, Mengatur **Strict-Transport-Security**, Mengatur **X-XSS-Protection**.
