簡體   English   中英

服務器端與客戶端文件哈希

[英]Server-side vs client-side file hashing

我將要編寫一些webapp / tool / widget,它需要在服務器上存儲一些文件。 為了避免在服務器端造成不必要的負載,我想在客戶端上創建文件哈希(使用SHA,MD5或其他...)。 可使用HTML5 FileAPI進行管理,但是Opera和IE9用戶將被解雇。 可以使用JAVA或Flash小程序代替HTML5方法,以保持應用程序跨瀏覽器的兼容性。 但是由於我對JAVA / Flash不熟悉(而且我只會在生死攸關的情況下使用它們),因此,如果可能的話,我想堅持使用JS。 但是歡迎所有客戶端建議... JS,JAVA,Flash,無論如何...

不管用戶代理是什么,傳統的POST方法(使用PHP)都可以解決問題。 而且AFAIK更安全。

長話短說,我的問題是: 為什么我應該更喜歡客戶端而不是服務器端哈希?

您能否提供兩種方法的利弊?

服務器端負載更多,但不是很多。 編寫代碼,安排時間,測量內存使用情況等。我懷疑這將是一個大問題,尤其是如果您可以使用cron作業將其分散開來(如果它很大),則尤其如此。

客戶端您無法信任哈希,要驗證它們,需要在服務器上重新計算它們。 較少的服務器負載,但是如果散列大文件需要花一些時間,這將使用戶感到煩惱。

除非您每分鍾都有數千個大文件,否則我會在服務器端這樣做!

我試圖寫一些在客戶端執行此操作的專家,但是老實說,您會讓自己變得困難。 以及如何確保提交的哈希是由您生成的? 任何人都可以輕松使用Firebug等工具並更改運行的代碼(更正我,如果我對此錯了,請不要實際使用它:D)。 而且,他們可以創建/偽造自己的請求並將其發布到您的PHP文件中,因此您將失去很多控制權。

那么,您將如何檢查數據呢? 生成另一個哈希並相互檢查? 但是您已經在服務器端完成了!

因此,請考慮將散列操作保留在您控制環境的服務器端。 哈希算法已經存在了很多年,所以我確信它們已經對其進行了很多優化。 並且您將確保與客戶的更多兼容性。

而且,如果您獲得的流量足夠多,以至於哈希成為主要的性能問題,那么也許是時候升級到更大的設備了……

但是請不要誤解我的意思,這是很有可能的,而且很有道理-http: //www.movable-type.co.uk/scripts/sha1.html-但我無法相信這個解決方案。

如果關閉JavaScript怎么辦? 如果您在服務器端進行操作,則不必依靠JavaScript進行工作。 寧願使用額外的服務器資源以100%保證它將正常工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM