Saya telah melihat artikel dan posting di seluruh (termasuk SO) tentang topik ini, dan komentar yang berlaku adalah bahwa kebijakan yang sama asal mencegah bentuk POST di seluruh domain. Satu-satunya tempat saya melihat seseorang menyarankan bahwa kebijakan asal yang sama tidak berlaku untuk membentuk pos, ada di sini .
Saya ingin mendapat jawaban dari sumber yang lebih "resmi" atau formal. Misalnya, apakah ada yang tahu RFC yang membahas bagaimana asal-sama tidak atau tidak mempengaruhi formulir POST?
klarifikasi : Saya tidak menanyakan apakah GET atau POST dapat dibangun dan dikirim ke domain apa pun. Saya bertanya:
- jika Chrome, IE, atau Firefox akan memungkinkan konten dari domain 'Y' untuk mengirim POST ke domain 'X'
- jika server yang menerima POST benar-benar akan melihat nilai formulir apa pun. Saya mengatakan ini karena sebagian besar diskusi online mencatat penguji mengatakan server menerima posting, tetapi nilai formulir semuanya kosong / dilucuti.
- Apa dokumen resmi (yaitu RFC) menjelaskan apa perilaku yang diharapkan (terlepas dari apa yang telah diterapkan browser saat ini).
Kebetulan, jika asal-sama tidak mempengaruhi bentuk POST - maka itu membuatnya agak lebih jelas mengapa token anti-pemalsuan diperlukan. Saya mengatakan "agak" karena tampaknya terlalu mudah untuk percaya bahwa seorang penyerang bisa mengeluarkan HTTP GET untuk mengambil bentuk yang berisi token anti-pemalsuan, dan kemudian membuat POST ilegal yang berisi token yang sama. Komentar?
Jawaban:
Kebijakan asal yang sama hanya berlaku untuk bahasa pemrograman sisi browser. Jadi jika Anda mencoba memposting ke server yang berbeda dari server asal menggunakan JavaScript, maka kebijakan asal yang sama ikut bermain tetapi jika Anda memposting langsung dari formulir yaitu tindakan menunjuk ke server yang berbeda seperti:
dan tidak ada javascript yang terlibat dalam memposting formulir, maka kebijakan asal yang sama tidak berlaku.
Lihat wikipedia untuk informasi lebih lanjut
sumber
Dimungkinkan untuk membuat permintaan GET atau POST yang sewenang-wenang dan mengirimkannya ke server apa pun yang dapat diakses oleh browser korban. Ini termasuk perangkat di jaringan lokal Anda, seperti Printer dan Router.
Ada banyak cara membangun eksploitasi CSRF. Serangan CSRF sederhana berbasis POST dapat dikirim menggunakan
.submit()
metode. Serangan yang lebih kompleks, seperti upload file lintas-situs, serangan CSRF akan mengeksploitasi penggunaan CORS terhadap perilaku xhr.withCredentals .CSRF tidak melanggar Kebijakan Same-Origin Untuk JavaScrip t karena SOP berkaitan dengan JavaScript yang membaca respons server terhadap permintaan klien. Serangan CSRF tidak peduli dengan responsnya, mereka peduli dengan efek samping , atau menyatakan perubahan yang dihasilkan oleh permintaan, seperti menambahkan pengguna administratif atau menjalankan kode arbitrer di server.
Pastikan permintaan Anda dilindungi menggunakan salah satu metode yang dijelaskan dalam Lembar Curang Pencegahan CSRF OWASP . Untuk informasi lebih lanjut tentang CSRF, lihat halaman OWASP tentang CSRF .
sumber
Kebijakan asal yang sama tidak ada hubungannya dengan mengirim permintaan ke url lain (protokol atau domain atau port berbeda).
Ini semua tentang membatasi akses ke (membaca) data respons dari url lain. Jadi kode JavaScript dalam halaman dapat memposting ke domain sewenang-wenang atau mengirimkan formulir dalam halaman itu ke mana saja (kecuali jika formnya dalam iframe dengan url yang berbeda).
Tetapi apa yang membuat permintaan POST ini tidak efisien adalah bahwa permintaan ini tidak memiliki token anti-pemalsuan, sehingga diabaikan oleh url lainnya. Selain itu, jika JavaScript mencoba mendapatkan token keamanan itu, dengan mengirimkan permintaan AJAX ke url korban, itu dicegah untuk mengakses data tersebut dengan Kebijakan Asal yang Sama.
Contoh yang bagus: di sini
Dan dokumentasi yang bagus dari Mozilla: di sini
sumber