Pertanyaan Bagaimana breeze.js menangani keamanan dan menghindari mengekspos logika bisnis


Kami sedang mempertimbangkan angin js untuk membangun aplikasi perusahaan.

Kejutan angin adalah kita dapat mengeksekusi pertanyaan langsung dari browser klien. Ini memungkinkan untuk membangun kueri dinamis berdasarkan masukan pengguna tanpa memuat data yang tidak perlu. Saya telah menemukan bahwa menggunakan Breeze kita dapat membuat logika bisnis yang mengurangi perjalanan / transfer data oleh 1/10 atau bahkan lebih ketika menggunakan strategi pemuatan malas. menggunakan kueri seperti ini 

Angin hore !!!

Tapi bagaimana dengan keamanan Logika Bisnis, Sebagai contoh, Kita dapat memiliki tempat penyimpanan di mana kita dapat menyembunyikan, menyembunyikan dan mengaburkan logika bisnis kita; lalu gunakan pengontrol API Web MVC untuk melakukan panggilan ke kelas C # repositori tersebut. jadi Breeze JavaScript berbicara ke pengontrol WebAPi dan pembicaraan pengendali WebApi ke C # repositori. Pengendali akan selalu dijaga sangat sederhana dan mudah dibaca, tetapi Repositori mungkin berakhir dengan banyak logika bisnis untuk perusahaan yang menggunakan aplikasi. Jadi, jika peretas menggunakan, misalnya, konsol pengembang Google Chrome untuk memeriksa kode JavaScript, semua yang akan ia lihat adalah hal-hal seperti GetCustomers (), GetProductsForThisId (54). Tidak banyak informasi yang bisa dilihat (atau dicuri) di sana. Karena 90% dari Logika Bisnis akan hidup di repositori C # pada server.

Bagaimana angin menerjang itu?

Jika kita mulai memindahkan pertanyaan dan logika bisnis "dari C # pengendali ke JavaScript semilir", kita harus mempertimbangkan bahwa sistem kami berbasis keanggotaan. Saya pikir semakin banyak pertanyaan yang kami tunjukkan kepada klien dalam JavaScript, semakin rentan perangkat lunak kami, dan semakin banyak kami memberi tahu para peretas cara meretas situs web kami dan mungkin mencuri informasi.


32
2017-12-01 18:40


asal


Jawaban:


Keamanan adalah masalah yang sangat penting. Adalah bijaksana untuk berpikir secara hati-hati tentang data dan logika yang terpapar pada klien. Bagaimana kita bisa memperbaiki sentimen-sentimen ini menjadi pertanyaan konkret yang cocok untuk jawaban SO?

Tidak ada apa pun tentang Breeze yang harus menyebabkan Anda mengekspos logika bisnis ke klien JavaScript. Anda dapat (dan seharusnya) mengunci logika tersebut dengan aman di dalam repositori dan / atau metode pengontrol Anda.

Tetapi saya berjuang untuk memahami bagaimana klien bertanya sendiri adalah jenis logika bisnis yang perlu dilindungi. Di mana bahaya dalam permintaan untuk pelanggan yang namanya dimulai dengan 'A'?

Anda mungkin benar khawatir tentang permintaan untuk pelanggan dengan kekayaan bersih> $ 100.000. Tapi kesalahannya tidak ada dalam query. Kesalahannya adalah dalam mengekspos informasi pelanggan seperti itu kepada pengguna yang tidak sah dengan cara apapun, baik melalui Breeze dimana klausul ditambahkan ke kueri atau panggilan ke layanan bernama GetCustomers ().

Tempat untuk memblokir akses tidak sah ke pelanggan ada di server dan Anda dapat melakukannya dengan mudah di dalam metode aksi pengendali Breeze IQueryable seperti yang Anda bisa di Anda GetCustomer () metode. Beban jatuh pada Anda dalam kedua kasus untuk menerapkan batasan keamanan yang diperlukan pada pengontrol Anda dan dalam metode yang Anda ekspos.

Anda menulis pengontrol. Anda menulis repositori. Anda memiliki akses ke izin pengguna. Anda berada dalam kendali penuh dengan kemampuan yang tak terkompromi untuk mengekspos sebanyak atau sesedikit yang Anda inginkan.

FWIW, Breeze Anda EntityManager dapat memanggil metode layanan yang tidak kembali IQueryable<Customer>. Ini dapat memanggil metode pengontrol Web Api seperti IEnumerable<Customer> GetCustomers() atau Product GetProductForId(int id). Menurut pendapat saya, Anda akan kehilangan fleksibilitas fasilitas permintaan Breeze tanpa mendapatkan keamanan apa pun. Tapi itu hanya pendapat saya. Breeze akan mendukung pilihan Anda, apa pun itu.

Saya akan dengan senang hati mencoba menjawab pertanyaan "bagaimana" yang lebih spesifik.


43
2017-12-03 03:46



ingin menambahkan bahwa Anda dapat membatasi pengguna yang tidak diotorisasi dari quering dengan menggunakan atribut di webapi jika Anda mendapatkan kode 401 kembali dari server, cukup popup layar masuk dan ulangi pekerjaan yang diperlukan setelah pengguna masuk

sehingga pengguna dapat mencoba untuk mendapatkan data tentang pesanan tetapi dia tidak akan mendapatkannya kecuali dia berwenang untuk melakukannya


2
2018-01-02 15:51



Anda dapat melakukan banyak hal menggunakan angin.js Pertama-tama periksa jawaban saya tentang keamanan di sini

Bagaimana cara menangani otorisasi dengan Breeze JS?

Juga meskipun breeze.js dapat digunakan seperti ORM normal pada klien (yang bisa sangat membantu pada waktu), Anda harus menjaga logika bisnis Anda dalam pengendali api web dan hanya mengekspos hal-hal yang diperlukan menggunakan query OData. Jika Anda memerlukan logika manipulasi data, maka Anda harus melakukannya di server menggunakan metode khusus untuk itu.

Hanya logika UI yang harus ada pada klien, pertimbangkan juga bahwa ada beberapa implikasi kinerja jika Anda mulai melakukan beberapa kueri langsung dari klien. Kembangkan grafik entitas untuk memuat lebih banyak hasil atau gunakan metode yang lebih khusus yang mengembalikan objek. Breeze akan mengintrospeksi hasil dan mengkonsumsi entitas dengan senang hati tanpa implikasi.


1
2018-06-02 11:35