Apakah ini rekayasa berlebihan jika saya menambahkan perlindungan terhadap kesalahan yang disengaja pengguna (dengan kata lain), jika bahaya yang dapat ditimbulkan pengguna tidak terkait dengan kode saya?
Untuk memperjelas, saya memaparkan layanan JSON RESTful sederhana seperti ini:
GET /items - to retrieve list of user's items
PUT /items/id - to modify an item
POST /items - to add a new item
Layanan itu sendiri tidak dimaksudkan untuk digunakan melalui browser, tetapi hanya dari aplikasi pihak ketiga, yang dikendalikan oleh pengguna (seperti aplikasi telepon, aplikasi desktop, dll.). Juga, layanan itu sendiri harus stateless (yaitu sesi-kurang).
Otentikasi dilakukan dengan Otentikasi Dasar melalui SSL.
Saya berbicara tentang satu kemungkinan perilaku "berbahaya" seperti ini:
Pengguna memasukkan url GET di browser (tanpa alasan tapi ...). Browser meminta otentikasi dasar, memprosesnya, dan menyimpan otentikasi untuk sesi browsing saat ini. Tanpa menutup browser, pengguna mengunjungi situs web jahat, yang memiliki javascript CSRF / XSRF berbahaya yang membuat POST untuk layanan kami.
Skenario di atas sangat tidak mungkin, dan saya tahu bahwa dari perspektif bisnis saya tidak perlu terlalu khawatir. Tetapi demi memperbaiki situasi, apakah Anda berpikir bahwa jika nama pengguna / kata sandi diperlukan dalam data JSON POST juga, akan membantu?
Atau haruskah saya menghentikan Auth Dasar sama sekali, menyingkirkan GET, dan hanya menggunakan POST / PUT dengan informasi otorisasi di dalamnya? Karena informasi yang diambil melalui GET juga bisa sensitif.
Di sisi lain, apakah menggunakan header kustom dianggap sebagai implementasi REST murni? Saya bisa menghapus Auth Dasar, dan menggunakan header kustom. Dengan begitu, setidaknya serangan CSRF dari browser dapat dihindari, dan aplikasi yang menggunakan layanan akan mengatur nama pengguna / kata sandi di heather khusus. Buruk untuk pendekatan ini adalah, bahwa sekarang layanan tidak dapat dikonsumsi dari browser.