Di dunia nyata, mengapa kita perlu menerapkan keamanan tingkat metode?
Kami memiliki aplikasi web atau aplikasi desktop, di mana pengguna mengakses antarmuka pengguna (dan karena itu secara langsung tidak dapat mengakses metode ini).
Jadi di mana metode mengakses langsung muncul di sini?
sunting: Saya mengajukan pertanyaan ini karena saya bereksperimen dengan keamanan pegas, dan saya melihat otorisasi pengguna untuk mengakses metode.
sesuatu seperti :
@ROLE_ADMIN
public void update() {
//update
}
Jawaban:
Dalam aplikasi yang dirancang dengan benar, backend dan frontend terputus. Sistem keamanan backend tidak dapat menganggap frontend spesifik mana pun akan menangani keamanan dengan benar, sehingga harus menanganinya sendiri.
sumber
Saya berasumsi Anda berbicara tentang akses berbasis peran ke tindakan dalam sebuah pengontrol. Yaitu dalam arsitektur MVC setiap metode pada
Controller
kelas adalah tindakan terpisah. Sebagian besar kerangka kerja MVC yang saya gunakan memungkinkan saya untuk menetapkan hak istimewa pada tingkat metode dan tingkat kelas. Itu berarti saya bisa menerapkan atribut / anotasi di tingkat kelas dan peran yang sesuai akan diperlukan untuk setiap tindakan di controller itu.Dalam hal kontrol berbutir halus untuk akses berbasis peran pertimbangkan ini:
Suka atau tidak, ketika Ruby on Rails mengudara beberapa tahun yang lalu, hampir setiap kerangka kerja MVC menyalin pendekatan desain dasarnya. Dulu bahwa tindakan adalah kelas yang terpisah, tetapi logika tindakan cenderung kecil dan fokus sehingga overhead kelas penuh berlebihan. Memetakan metode pada pengontrol ke tindakan untuk halaman sebenarnya sangat masuk akal. Ketahuilah bahwa banyak orang membutuhkan kendali yang baik atas peran mana yang dapat melakukan fungsi apa.
sumber
Tingkat keamanan metode berguna karena dua alasan utama:
sebagai lapisan keamanan lain (selain lapisan lainnya)
dalam kasus di mana lebih nyaman atau logis untuk memiliki izin di tingkat metode pertimbangkan kasus di mana pengguna yang berbeda dapat melakukan tindakan "langsung" yang sama (sehingga keamanan klien tidak relevan). tetapi dalam beberapa kasus tindakan mereka dapat memicu perilaku yang ingin Anda batasi - dalam hal ini tingkat keamanan metode mungkin merupakan solusi yang relevan.
sumber
Mike Wiesner mengingatkan dalam presentasi SpringSource ini, Pengantar Keamanan Spring 3 / 3.1 , memberikan contoh bahwa Tomcat, dan banyak wadah Servlets lainnya memiliki bug yang gagal mengenali "../", ketika dikodekan dalam unicode, dengan cara yang tes sederajat yang sederhana akan gagal di Jawa, tetapi akan menerjemahkan ke direktori atas di sistem file.
Keamanan sulit, beberapa tingkat keamanan, akan meningkatkan peluang untuk memblokir upaya pengelakan. Karena keamanan tingkat metode dikodekan langsung di dalam kelas, setelah augmentasi AOP, saat Anda memanggil metode, Anda akan selalu memanggil pemeriksaan keamanan sebelumnya.
sumber
Saya kira Anda berbicara tentang metode publik, pribadi, dan terlindungi di sini?
Jika demikian, maka mereka tidak ada untuk tujuan keamanan. Mereka ada untuk tujuan memudahkan o menjamin bahwa perangkat lunak termodulasi dengan benar. (Apakah mereka berhasil dalam hal itu adalah debat saya akan pergi untuk orang lain. Namun, itulah visi untuk apa mereka.)
Misalkan saya memberikan perpustakaan, maka saya bebas untuk kemudian memberikan versi perpustakaan yang berbeda dan mengubah barang-barang yang ditandai sebagai pribadi sebanyak yang saya mau. Sebaliknya jika saya tidak menandainya sebagai barang pribadi, maka saya tidak akan dapat mengubah internal perangkat lunak saya karena seseorang, di suatu tempat, mungkin mengaksesnya secara langsung. Tentu saja, secara teori itu adalah kesalahan mereka karena tidak menggunakan API yang terdokumentasi. Tetapi klien akan menganggapnya sebagai kesalahan saya bahwa pemutakhiran perangkat lunak saya merusak perangkat lunak mereka. Mereka tidak ingin alasan, mereka ingin itu diperbaiki. Tetapi jika saya tidak membiarkan mereka memiliki akses untuk memulai, maka API saya adalah metode publik yang saya maksudkan sebagai API saya dan masalahnya dapat dihindari.
Hal kedua yang paling mungkin Anda bicarakan adalah model keamanan Java. Jika Anda membicarakan hal itu, maka alasan keberadaannya adalah bahwa visi asli untuk Java melibatkan orang-orang yang mengirim applet yang mungkin tidak terpercaya untuk bekerja secara interaktif di dalam program pihak ketiga (mis. Browser). Oleh karena itu model keamanan dimaksudkan untuk memberi pengguna beberapa perlindungan terhadap applet jahat. Oleh karena itu ancaman keamanan yang perlu dikhawatirkan dan dilindungi adalah applet yang tidak terpercaya yang mencoba berinteraksi dengan perangkat lunak lain yang mungkin dimuat.
sumber