Latar Belakang:
Saya sedang merancang skema otentikasi untuk layanan web REST. Ini tidak "benar-benar" perlu aman (ini lebih merupakan proyek pribadi) tetapi saya ingin membuatnya seaman mungkin sebagai pengalaman latihan / belajar. Saya tidak ingin menggunakan SSL karena saya tidak ingin kerumitan dan, sebagian besar, biaya pengaturannya.
Pertanyaan SO ini sangat berguna untuk memulai saya:
- Otentikasi tenang
- Praktik Terbaik untuk mengamankan REST API / layanan web
- Contoh API web SOAP / REST / RPC terbaik? Dan mengapa Anda menyukainya? Dan apa yang salah dengan mereka?
Saya sedang berpikir untuk menggunakan versi sederhana dari otentikasi Amazon S3 (saya suka OAuth tetapi tampaknya terlalu rumit untuk kebutuhan saya). Saya menambahkan nonce yang dibuat secara acak , disediakan oleh server, ke permintaan, untuk mencegah serangan replay.
Untuk sampai ke pertanyaan:
S3 dan OAuth bergantung pada penandatanganan URL permintaan bersama dengan beberapa header yang dipilih. Tak satu pun dari mereka menandatangani badan permintaan untuk permintaan POST atau PUT. Bukankah ini rentan terhadap serangan orang-di-tengah, yang menjaga url dan header dan menggantikan tubuh permintaan dengan data yang diinginkan penyerang?
Sepertinya saya bisa menjaga ini dengan memasukkan hash dari tubuh permintaan dalam string yang ditandatangani. Apakah ini aman?