Tindakan publik di pengontrol admin

12

Saya telah menemukan bahwa di kelas \Magento\Backend\App\AbstractAction(leluhur dari setiap tindakan pengontrol admin) ada anggota yang disebut _publicActionsyang digunakan dalam validasi kunci rahasia seperti ini:

 if (is_array($this->_publicActions) && in_array($this->getRequest()->getActionName(), $this->_publicActions)) {
     return true;
 }

Ini berarti, bahwa jika nama tindakan tertentu tercantum dalam _publicActionsAnda dapat mengakses tindakan tanpa kunci rahasia di url.
Ini adalah berkah untuk pengembangan dan debugging, karena Anda bisa melakukannya seperti ROOT/admin/module/controller/actionsecara manual, tanpa perlu mengetahui kunci admin rahasia, tetapi yang saya tidak mengerti adalah mengapa saya bisa mengakses halaman edit produk tanpa kunci rahasia.
Panggil saja halaman edit produk seperti ini ROOT/admin/catalog/product/edit/id/{product_id_here}.

The publicActionsanggota ditimpa untuk pesanan (yang memungkinkan indeks dan melihat), dalam produk (untuk edit) dan di redirect controller untuk pengalihan.

Sekarang pertanyaan saya:
Mengapa hanya beberapa tindakan edit diizinkan tanpa kunci rahasia, dan kapan / apa yang harus saya izinkan dalam modul CRUD khusus saya tanpa kunci rahasia?

Marius
sumber

Jawaban:

4

Saya belum pernah melihat jawaban resmi dari insinyur Magento tentang masalah ini, tetapi bagi saya selalu tampak bahwa fitur ini digunakan ketika Anda ingin pengguna dapat menautkan ke halaman dari luar sesi aman, karena jika tidak mengklik pada tautan yang merujuk URL admin aman hanya akan mengarahkan Anda ke dasbor setelah meminta Anda untuk masuk.

Saya selalu memiliki dua skenario dalam pikiran: Anda ingin pengguna dapat berbagi halaman admin tertentu dengan pengguna lain atau Anda ingin beberapa halaman publik untuk referensi URL khusus Anda di back-end Magento (yang jika tidak hanya akan mengarahkan ulang ke dasbor) .

Ketika Anda melihat inti Magento, Anda dapat melihat bahwa Magento pada dasarnya telah mengimplementasikan ini untuk ulasan, pesanan, dan halaman produk. Saya kira para insinyur Magento melakukan ini sehingga pengguna admin toko dapat mengirim tautan langsung melalui messenger atau email (seperti dalam "Hai, lihat pesanan ini: [url] ."). Saya pernah mengimplementasikan fitur seperti ini untuk halaman ketika saya ingin itu mudah dibagikan oleh pengguna admin.

Anda pada dasarnya memperdagangkan peningkatan risiko serangan CSRF untuk kebebasan dapat terhubung langsung ke halaman di back-end admin Anda, yang seharusnya hanya dilakukan ketika Anda memiliki kasus penggunaan yang sangat pasti. Saya kira CMS Pages tidak termasuk dalam kasus penggunaan untuk tim inti Magento karena mereka tampaknya telah membatasi "fitur" ini untuk tindakan yang terkait dengan dukungan pelanggan dan pengeditan produk - pada dasarnya tugas yang paling umum untuk perwakilan layanan pelanggan di banyak toko.

TiEul
sumber
Ini masuk akal. +1 Jika saya tidak mendengar jawaban resmi (berbeda dari yang ini) dari anggota tim dalam 24 jam berikutnya, tanda centang adalah milik Anda.
Marius
0

Jika saya harus menebak, saya akan mengatakan itu karena kunci rahasia dapat digunakan sebagai bagian dari perlindungan CSRF dan / atau XSS yang dibangun untuk Magento. Jadi untuk halaman yang tidak mengubah kontennya berdasarkan input pengguna, mungkin tidak perlu memiliki kunci rahasia di sana.

Dengan kata lain, hanya tindakan yang menerima data / input yang diberikan pengguna yang dilindungi dengan kunci rahasia. Tebakan saja.

Brett
sumber
jika itu benar, maka mengedit halaman CMS juga harus "publik". Jadi harus mengedit pelanggan atau aturan pajak.
Marius
Itu poin yang adil; dan tanggapan TiEul memang masuk akal. Saya mengambil tikaman dalam gelap, sepertinya saya merindukan.
Brett