Hashing file sisi server vs sisi klien

Saya akan menulis sedikit webapp/alat/widget yang perlu menyimpan beberapa file di server. Untuk menghindari beban yang tidak perlu di sisi server, saya ingin membuat hash file (dengan SHA, MD5 atau apa pun...) di sisi klien. Ini dapat dikelola dengan FileAPI HTML5, tetapi pengguna Opera dan IE9 akan dipecat. Applet JAVA atau Flash dapat digunakan sebagai pengganti pendekatan HTML5, agar aplikasi tetap kompatibel lintas-browser. Tapi karena saya tidak familiar dengan JAVA/Flash (dan saya hanya akan menggunakannya dalam situasi hidup atau mati), saya ingin tetap menggunakan JS jika memungkinkan. Tapi semua saran sisi klien diterima... JS, JAVA, Flash, apa pun...

Metode POST tradisional (dengan PHP) akan berhasil terlepas dari agen penggunanya. Dan AFAIK lebih aman.

Singkat cerita, pertanyaan saya adalah: mengapa saya harus memilih hashing sisi klien daripada hashing sisi server?

Bisakah Anda memberikan beberapa pro dan kontra dari kedua pendekatan tersebut?


person aL3xa    schedule 19.04.2011    source sumber
comment
Opini: rasa sakit dan kekacauan yang terkait dengan melakukan hal ini di sisi klien membuat hal itu sama sekali bukan permulaan bagi saya. Saya tidak dapat membayangkan bahwa server yang harus menyimpan file akan terbebani karena harus mengumpulkan nilai hash sederhana saat melakukannya.   -  person Pointy    schedule 19.04.2011


Jawaban (3)


Sisi server Muatannya lebih banyak, namun tidak sebanyak itu. Tulis kode, atur waktunya, ukur penggunaan memori, dll. Saya ragu ini akan menjadi masalah besar, terutama jika Anda dapat melakukannya dengan tugas cron untuk menyebarkan beban jika ukurannya besar.

Sisi klien Anda tidak dapat mempercayai hash, dan untuk memverifikasinya, Anda perlu menghitung ulang hash tersebut di server. Beban server lebih sedikit, tetapi jika memerlukan waktu cukup lama untuk meng-hash file berukuran besar, hal ini akan mengganggu pengguna.

Saya akan melakukannya di sisi server kecuali Anda memiliki ribuan file besar setiap menit!

person Rich Bradshaw    schedule 19.04.2011
comment
Kuncinya di sini adalah Anda tidak bisa mempercayai hash yang datang dari sisi klien. Inti dari hash adalah untuk memberikan jaminan bahwa data tersebut benar. Melakukannya di sisi klien meniadakan manfaat itu. Kemacetan di sini adalah bandwidth untuk memindahkan file ke server - ini adalah konstanta di kedua pendekatan. Sebagai aturan umum, optimalkan setelah Anda mengalami masalah. Lihat ebay, youtube, meebo, dll. sebagai contoh pendekatan tersebut. - person Milimetric; 19.04.2011

Saya mencoba menulis beberapa kelebihan dalam melakukan ini di sisi klien tetapi menurut pendapat jujur ​​saya, Anda hanya akan mempersulit diri Anda sendiri. Dan bagaimana Anda memastikan hash yang dikirimkan dibuat oleh Anda? Siapa pun dapat dengan mudah menggunakan alat seperti Firebug dan mengubah kode yang sedang berjalan (Koreksi saya Jika saya salah tentang ini, saya tidak pernah benar-benar menggunakannya itu :D). Dan lebih jauh lagi mereka dapat membuat/memalsukan permintaan mereka sendiri dan mempostingnya ke file PHP Anda, sehingga Anda akan kehilangan banyak kendali.

Lalu bagaimana cara memeriksa datanya? Hasilkan hash lain dan periksa satu sama lain? Tapi kemudian Anda sudah melakukannya di sisi server!

Jadi pikirkan tentang menjaga operasi hashing di sisi server tempat Anda mengontrol lingkungan. Dan algoritma hashing telah ada selama bertahun-tahun, jadi saya yakin mereka telah banyak mengoptimalkannya. Dan Anda akan memastikan lebih banyak kompatibilitas untuk klien Anda.

Dan jika Anda mendapatkan cukup lalu lintas sehingga hashing merupakan pencapaian kinerja yang besar, maka mungkin inilah saatnya untuk meningkatkan ke sesuatu yang lebih besar ...

Tapi jangan salah paham, ini sangat mungkin dan masuk akal - http://www.movable-type.co.uk/scripts/sha1.html - tetapi saya tidak bisa mempercayai solusi ini.

person Johann du Toit    schedule 19.04.2011

bagaimana jika JavaScript dimatikan? Anda tidak harus bergantung pada JavaScript untuk melakukan pekerjaan Anda jika Anda melakukannya di sisi server. Lebih baik menggunakan sumber daya server tambahan untuk jaminan 100% bahwa ini akan berfungsi!

person Gavin Rogers    schedule 19.04.2011