Magento sejak versi baru-baru ini form_key
sebagai bagian dari tindakan add to cart, untuk melindungi dari serangan CSRF.
Jadi sekarang saya bertanya-tanya, apakah itu benar-benar diperlukan untuk tempat ini, dan mengapa atau lebih baik dikatakan, terhadap skenario spesifik mana yang harus dilindungi.
magento-1.8
addtocart
security
csrf
Flyingmana
sumber
sumber
Jawaban:
Saya percaya akan sulit untuk menemukan jawaban yang pasti untuk pertanyaan ini mengapa token CSRF "diperlukan" di Magento's add to cart GET action. Saya akan berusaha menafsirkan tujuannya. Saya bukan ahli keamanan dan ini adalah interpretasi saya terhadap CSRF dalam konteks khusus ini.
Konteks
Dari owasp.org
Salah satu contoh serangan ini adalah menyematkan gambar tersembunyi di email atau halaman web alternatif:
Server web tidak akan membedakan dari mana permintaan itu berasal dan dengan setia akan menambahkan item ke keranjang pengguna itu.
Tujuan mencegah serangan CSRF adalah untuk mencegah permintaan yang berubah negara . Menambahkan item ke troli akan dianggap sebagai perubahan status. Secara umum, saya akan mempertimbangkan ini adalah perubahan keadaan tidak berbahaya dibandingkan dengan mengirimkan pesanan, mentransfer dana atau memperbarui alamat email.
Mengenai perubahan status dan metode HTTP, RFC 2616 mengatakan yang berikut:
Magento dan CSRF
Magento menerapkan mekanisme pencegahan CSRF untuk admin dan area frontend dengan menggunakan token (form key). Saya berasumsi bahwa tujuan Magento, sebagai platform yang dimaksudkan untuk dibangun oleh pengembang lain, adalah untuk mengamankan semua permintaan yang diubah oleh negara. Alasannya adalah bahwa mereka tidak tahu apa yang mungkin diungkapkan oleh pengembang pelaksana atau ekstensi pihak ketiga. Lebih aman untuk mengamankan semua permintaan perubahan negara daripada memiliki sesuatu yang diekspos oleh modul pihak ke-3 dan menjadi PR buruk untuk platform. Saya sebenarnya tidak tahu apakah semua permintaan perubahan negara diamankan dari serangan CSRF.
Satu hal yang perlu diperhatikan adalah bahwa Magento tidak selalu menggunakan kunci formulir untuk melindungi permintaan perubahan negara. Misalnya, permintaan Hapus Dari Keranjang (
/checkout/cart/delete/id/{ID}
) dan Hapus Alamat Pelanggan (/customer/address/delete/id/{ID}
) keduanya adalah MENDAPATKAN permintaan yang lulus dalam ID Entitas. Pengontrol (atau model) kemudian menangani memastikan bahwa pengguna berwenang untuk menghapus catatan entitas tersebut (mengubah keadaan). Ini adalah dua contoh di mana Magento tidak mengikuti RFC 2616 . Agar adil, untuk beberapa kasus penggunaan mungkin tidak praktis atau perlu dilakukan.Tampaknya pemeriksaan formulir kunci dalam
Mage_Checkout_CartController::addAction
metode telah ditambahkan di versi 1.8. Dari catatan rilis kami memiliki yang berikut untuk dimatikan:Sayangnya bahasanya tidak jelas dan "bisa saja" membuat saya percaya itu karena asumsi yang saya sebutkan sebelumnya: permintaan perubahan keadaan yang aman. Mungkin ada kemungkinan mengirim parameter tambahan yang menyebabkan semacam perilaku yang tidak diinginkan:
/checkout/cart/add/product/337/email/[email protected]/password/l33tp4ssw0rd
Idenya adalah bahwa dengan menambahkan sesuatu ke keranjang ada beberapa kode (inti atau pihak ke-3) yang kebetulan dipicu saat menambahkan ke keranjang, misalnya melalui beberapa acara yang dikirim.
Tampaknya tidak mungkin bahwa kerentanan semacam itu ada di luar kotak dan jika memang ada yang berharap Magento akan melakukan pekerjaan yang lebih baik untuk mengungkapkan rincian / risiko. Satu risiko yang bisa saya lihat adalah bahwa Magento secara buta menyimpan parameter permintaan selama menambahkan ke keranjang di
product_options
kolom tabel item pesanan penjualan (lihatinfo_buyRequest
:). Secara teori seseorang dapat mengelabui sekelompok pengguna untuk menambahkan item ke keranjang mereka dengan parameter kueri aneh dan itu akan disimpan ke dalamsales_flat_quote_item_option
tabel dan akhirnyasales_flat_order_item
tabel jika mereka juga bisa membuat para pengguna untuk mengkonversi. Ini tampaknya sangat tidak mungkin bagi saya dalam banyak kasus.Tambahkan ke Masalah Kunci Formulir Keranjang
Salah satu masalah besar yang dihadapi orang dengan implementasi FPC dan token CSRF adalah mereka akhirnya di-cache. Klien pertama yang menghangatkan cache menghasilkan token, ketika klien kedua mendapatkan cache HIT mereka sekarang telah diberi halaman dengan token pengguna pertama. Saat mengirimkan formulir, token tidak akan cocok.
Magento Enterprise menggunakan placeholder untuk menemukan / mengganti kunci formulir di halaman yang di-cache. Implementasi pernis akan menyukai menggunakan ESI ke mana pun kunci formulir digunakan.
Saya ingin tahu apakah ekstensi "ajax cart" yang lebih populer akhirnya memeriksa token CSRF selama penambahan permintaan ke keranjang.
Satu permintaan fitur di mana saya akhirnya melepaskan token CSRF untuk tindakan add to cart memungkinkan kemampuan membuat tautan add to cart untuk digunakan dalam email atau situs web lainnya (media sosial). Terkadang pemasaran ingin agar pengguna langsung menambahkan item ke troli dan mengarahkan ulang ke troli atau checkout segera. Ini tidak dapat dengan mudah dilakukan jika token CSRF diperlukan. Saya hanya akan merekomendasikan ini jika Anda merasa nyaman dengan tingkat risiko dan percaya pada kode Anda sendiri dan pihak ketiga mana pun.
sumber
Prinsip pengembangan web mengatakan segala bentuk pemalsuan permintaan lintas situs (CSRF) atau skrip lintas situs (XSS) tidak diinginkan dan harus selalu dihindari.
Apa artinya? Untuk CSRF, Anda tidak dapat memiliki URL apa pun yang mengubah data yang ada di negara mereka. Kalau tidak, seorang penyerang dapat memanipulasi isi keranjang seseorang, atau menambah / menghapus item dari daftar keinginan atau perbandingan mereka, hanya dengan menipu mereka agar mengklik atau mengunjungi URL itu (pengalihan, bahkan).
Kunci formulir adalah cara mereka menyiasatinya. Magento menghasilkan hash yang khusus untuk sesi, dan mengharuskannya dikirimkan bersama dengan setiap permintaan perubahan data.
Apakah menambahkan / menghapus item keranjang merupakan vektor serangan yang parah? Mungkin tidak, untuk sebagian besar situs. Tapi tetap saja itu CSRF, dan CSRF itu buruk. Itu sebabnya ada
form_key
nilai sekarang (pada CE 1.8).sumber