Mengapa kita membutuhkan keamanan tingkat metode?

14

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
}
Vinoth Kumar CM
sumber
1. untuk menggunakan kembali kode tanpa memikirkan masalah keamanan 2. untuk berintegrasi dengan layanan web dengan mudah 3. untuk memastikan tentang keamanan ketika Anda tidak mempercayai mekanisme keamanan lapisan atas
Erkan Erol

Jawaban:

23

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.

jwenting
sumber
Anda tidak menjawab pertanyaan: mengapa tingkat metode?
Codism
@Codism - Dia menjawabnya. B / c Anda tidak dapat mengasumsikan apa pun. Anda melakukan pemeriksaan otorisasi pada tingkat metode b / c terlepas dari bagaimana seseorang sampai di sana, Anda perlu memastikan mereka memiliki hak yang tepat.
Joseph Lust
@JosephLust: jawaban dan komentar Anda dapat diterapkan ke sistem keamanan apa pun di tingkat yang berbeda. Pertanyaan awal secara khusus menanyakan mengapa pada tingkat metode.
Codism
1
Karena itu adalah level terendah yang tersedia dan siap diterapkan tanpa menggunakan AOP atau AspectJ. Saya tidak percaya ini berlaku untuk semua implementasi keamanan lainnya.
Joseph Lust
5

Saya berasumsi Anda berbicara tentang akses berbasis peran ke tindakan dalam sebuah pengontrol. Yaitu dalam arsitektur MVC setiap metode pada Controllerkelas 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:

  • Lebih mudah untuk mengelompokkan semua tindakan di sekitar sumber daya bersama. Yaitu tindakan Buat / Baca / Perbarui / Hapus (CRUD) untuk artikel, akun, dll. Ini membuat API gaya REST lebih mudah untuk ditulis dan dipelihara.
  • Banyak sistem memiliki kredensial / peran berbeda yang diperlukan untuk tindakan Buat / Perbarui / Hapus daripada yang mereka lakukan untuk tindakan Baca.
  • Jika semua tindakan akun pengguna berada dalam satu pengontrol, Anda ingin mengizinkan siapa saja untuk masuk, tetapi hanya orang-orang tertentu yang membuat akun baru atau menetapkan peran.

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.

Berin Loritsch
sumber
3

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.

Ophir Yoktan
sumber
0

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.

stivlo
sumber
-2

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.

btilly
sumber
2
Anda tidak mengerti, dia tidak berbicara tentang publik, pribadi, dan terlindungi, tetapi tentang memeriksa apakah pengguna memiliki atau tidak memiliki peran dengan AOP
stivlo