Same Origin Policy (SOP) Dalam Praktek Security
Pada bagian ini saya akan menjelaskan apa itu same origin policy (SOP) dan bagaimana penerapannya. SOP merupakan salah satu best practice dalam mekanisme hardening keamanan sebuah aplikasi.
Apa yang dimaksud dengan Same Origin Policy (SOP)?
Same origin policy (SOP) adalah mekanisme keamanan web yang dibangun di browser web yang mempengaruhi cara situs web dapat mengakses satu sama lain. Tanpa SOP, situs web atau aplikasi web jahat dapat mengakses yang lain tanpa batasan. Itu akan memungkinkan penyerang dengan mudah mencuri informasi sensitif dari situs web lain atau bahkan melakukan tindakan di situs lain tanpa persetujuan pengguna.
SOP tidak perlu diaktifkan, SOP diaktifkan secara otomatis di setiap browser yang mendukungnya. Pengembang harus mengetahui mekanisme ini saat membuat aplikasi web yang berkomunikasi satu sama lain, sehingga mereka tahu cara menonaktifkannya dalam keadaan khusus dengan aman.
Same origin policy sering disamakan dengan Content-Securiy Policy. Perbedaannya adalah Content-Securiy Policy mencegah panggilan ke sumber daya eksternal (keluar) sedangkan same origin policy mencegah panggilan dari sumber daya eksternal (masuk). Selain itu, Content-Securiy Policy tidak diaktifkan secara default dan harus ditentukan oleh pengembang.
Fungsi Same Origin Policy (SOP)
Mekanisme SOP dirancang untuk melindungi dari serangan seperti Cross-Site Request Forgery (CSRF) , yang pada dasarnya berupaya memanfaatkan kerentanan karena perbedaan asal. Namun, karena ini hanyalah kebijakan keamanan browser dan tidak pernah ditetapkan sebagai spesifikasi Internet permanen, setiap browser mengimplementasikannya sedikit berbeda. Oleh karena itu, Anda harus berhati-hati dalam mengandalkan SOP karena pengguna mungkin menjalankan browser dengan aturan SOP yang berbeda (misalnya, Internet Explorer).
Perhatikan bahwa SOP sama sekali tidak berguna sebagai metode perlindungan terhadap Cross-Site Scripting (XSS) karena harus membatasi pemuatan skrip dari situs yang berbeda, yang pada akhirnya menghambat fungsionalitas aplikasi web.
Cara Kerja Same Origin Policy (SOP)
Untuk memahami same origin policy, pertama-tama kita perlu memahami istilah origin .
Dalam istilah web, origin adalah sekumpulan karakteristik umum dari sumber daya web. Dalam kebanyakan kasus, origin adalah kombinasi dari tiga elemen: skema (protokol), nama host (domain/subdomain), dan port. Oleh karena itu, semua sumber daya yang diidentifikasi oleh skema yang sama: nama host: kombinasi port memiliki origin yang sama.
Namun, jika dua sumber daya berbeda dalam salah satu dari ketiga elemen ini, browser modern seperti Google Chrome atau Mozilla Firefox memperlakukan sumber daya ini sebagai sumber yang berbeda. Hanya dalam kasus Microsoft Internet Explorer, nomor port tidak dianggap sebagai bagian dari origin. Misalnya:
URL diatas menggunakan skema http, domain normal-website.com, dan nomor port 80. Tabel berikut menunjukkan bagaimana same origin policy akan diterapkan jika konten di URL di atas mencoba mengakses origin lainnya:
URL diakses | Akses diizinkan? |
---|---|
http://normal-website.com/example/ | Ya: skema, domain, dan port yang sama |
http://normal-website.com/example2/ | Ya: skema, domain, dan port yang sama |
https://normal-website.com/example/ | Tidak: skema dan port berbeda |
http://en.normal-website.com/example/ | Tidak: domain yang berbeda |
http://www.normal-website.com/example/ | Tidak: domain yang berbeda |
http://normal-website.com:8080/example/ | Tidak: port yang berbeda* |
*Internet Explorer akan mengizinkan akses ini karena IE tidak memperhitungkan nomor port saat menerapkan kebijakan asal yang sama.
Penerapan Same Origin Policy
Ada berbagai pengecualian untuk kebijakan asal yang sama:
- Beberapa objek dapat ditulis tetapi tidak dapat dibaca lintas-domain, seperti location objek atau location.href properti dari iframe atau jendela baru.
- Beberapa objek dapat dibaca tetapi tidak dapat ditulis lintas-domain, seperti length properti window objek (yang menyimpan jumlah bingkai yang digunakan pada halaman) dan closed properti.
- Fungsi replace umumnya dapat disebut lintas-domain pada location objek.
- Anda dapat memanggil fungsi tertentu lintas domain. Misalnya, Anda dapat memanggil fungsi close, blur dan focus di jendela baru. Fungsi postMessage ini juga dapat dipanggil di iframe dan jendela baru untuk mengirim pesan dari satu domain ke domain lainnya.
Karena persyaratan lama, same origin policy lebih longgar saat menangani cookie, sehingga sering kali dapat diakses dari semua subdomain situs meskipun setiap subdomain secara teknis memiliki origin yang berbeda. Anda dapat mengurangi risiko ini sebagian dengan menggunakan HttpOnly flag cookie.
Dimungkinkan untuk mengendurkan same origin policy menggunakan document.domain. Properti khusus ini memungkinkan Anda untuk melonggarkan SOP untuk domain tertentu, tetapi hanya jika itu adalah bagian dari FQDN Anda (nama domain yang memenuhi syarat). Misalnya, Anda mungkin memiliki domain marketing.example.comdan ingin membaca konten domain tersebut di example.com. Untuk melakukannya, kedua domain perlu disetel document.domain ke example.com.
Kemudian SOP akan memungkinkan akses antara dua domain meskipun asalnya berbeda. Di masa lalu dimungkinkan untuk menyetel document.domainke TLD seperti com, yang memungkinkan akses antara domain mana pun di TLD yang sama, tetapi sekarang browser modern mencegahnya.
Kapan browser menggunakan Same Origin Policy ?
Namun, SOP tidak sepenuhnya menghilangkan interaksi antar asal yang berbeda. Browser mengevaluasi apakah interaksi tertentu dapat menimbulkan ancaman dan jika tidak, diizinkan. Misalnya:
- Anda biasanya dapat menulis di antara asal-usul. Misalnya, Anda dapat membuat tautan lintas asal dan mengirimkan formulir lintas asal.
- Anda biasanya dapat menyematkan di antara origin. Misalnya, Anda dapat menggunakan konten dari origin yang berbeda dalam iframe (jika X-Frame-Options mengizinkannya) atau menyematkan img , css , atau elemen skrip dari situs lain.
- Namun, akses baca antar origin biasanya diblokir. Ini sering kali berarti Anda dapat mengirim permintaan lintas asal tetapi tidak dapat membaca balasannya.
Mengatasi Pembatasan Same Origin Policy
1. Menentukan Origin
Namun, ini hanya mungkin untuk situs dalam hierarki domain yang sama jika tidak, situs mana pun dapat berpura-pura memiliki asal Anda. Misalnya, Anda dapat menggunakan metode sederhana ini jika Anda memiliki beberapa situs mikro di bawah subdomain yang berbeda, seperti login.example.com , blog.example.com , dll.
2. Menggunakan metode postMessage
3. Berbagi sumber daya lintas sumber
4. Menggunakan WebSockets
5. Menggunakan JSONP (tidak disarankan)
1. https://portswigger.net/web-security/cors/same-origin-policy
2. https://www.invicti.com/learn/same-origin-policy-sop/