การแฮชไฟล์ฝั่งเซิร์ฟเวอร์เทียบกับฝั่งไคลเอ็นต์

ฉันกำลังจะเขียน webapp/tool/widget เล็กๆ น้อยๆ ที่ต้องการจัดเก็บไฟล์บางไฟล์บนเซิร์ฟเวอร์ เพื่อหลีกเลี่ยงการโหลดที่ไม่จำเป็นบนฝั่งเซิร์ฟเวอร์ ฉันต้องการสร้างไฟล์แฮช (ด้วย SHA, MD5 หรืออะไรก็ตาม...) บนฝั่งไคลเอ็นต์ สามารถจัดการได้ด้วย HTML5 FileAPI แต่ผู้ใช้ Opera และ IE9 จะถูกไล่ออก สามารถใช้ JAVA หรือ Flash applet แทนวิธี HTML5 เพื่อให้แอปพลิเคชันสามารถใช้งานข้ามเบราว์เซอร์ได้ แต่เนื่องจากฉันไม่คุ้นเคยกับ JAVA/Flash (และฉันจะใช้มันในสถานการณ์ความเป็นอยู่หรือความตายเท่านั้น) ฉันจึงอยากจะใช้ JS หากเป็นไปได้ แต่ยินดีต้อนรับข้อเสนอแนะฝั่งไคลเอ็นต์ทั้งหมด... JS, JAVA, Flash, อะไรก็ตาม...

วิธี POST แบบเดิม (ด้วย PHP) จะทำเคล็ดลับโดยไม่คำนึงถึงตัวแทนผู้ใช้ และ AFAIK ก็ปลอดภัยกว่า

สรุปสั้นๆ คำถามของฉันคือ: เหตุใดฉันจึงควรเลือกใช้การแฮชฝั่งไคลเอ็นต์มากกว่าการแฮชฝั่งเซิร์ฟเวอร์

คุณสามารถให้ข้อดีข้อเสียของทั้งสองวิธีได้หรือไม่?


person aL3xa    schedule 19.04.2011    source แหล่งที่มา
comment
ความคิดเห็น: ความเจ็บปวดและความยุ่งเหยิงที่เกี่ยวข้องกับการทำฝั่งไคลเอ็นต์นี้ทำให้นั่นไม่ใช่จุดเริ่มต้นที่สมบูรณ์แบบสำหรับฉัน ฉันจินตนาการไม่ออกว่าเซิร์ฟเวอร์ที่ต้องบันทึกไฟล์ต่อไปจะรับภาระหนักเกินไปโดยต้องสะสมค่าแฮชแบบง่าย ๆ ในขณะที่ทำเช่นนั้น   -  person Pointy    schedule 19.04.2011


คำตอบ (3)


ฝั่งเซิร์ฟเวอร์ โหลดมากขึ้นแต่ไม่มาก เขียนโค้ด จับเวลา วัดการใช้หน่วยความจำ ฯลฯ ฉันสงสัยว่ามันจะเป็นปัญหาใหญ่ โดยเฉพาะอย่างยิ่งหากคุณสามารถทำได้โดยใช้ cron job เพื่อกระจายโหลดออกไปถ้ามันใหญ่มาก

ฝั่งไคลเอ็นต์ คุณไม่สามารถเชื่อถือแฮชได้ และคุณต้องคำนวณแฮชใหม่บนเซิร์ฟเวอร์เพื่อยืนยัน โหลดเซิร์ฟเวอร์น้อยลง แต่ถ้าใช้เวลาสักพักในการแฮชไฟล์ขนาดใหญ่ สิ่งนี้จะสร้างความรำคาญให้กับผู้ใช้

ฉันจะทำฝั่งเซิร์ฟเวอร์ เว้นแต่คุณจะมีไฟล์ขนาดใหญ่นับพันไฟล์ทุกๆ นาที!

person Rich Bradshaw    schedule 19.04.2011
comment
สิ่งสำคัญคือคุณไม่สามารถเชื่อถือแฮชที่มาจากฝั่งไคลเอ็นต์ได้ ประเด็นหลักของแฮชคือเพื่อให้มั่นใจว่าข้อมูลถูกต้อง การทำแบบนั้นฝั่งไคลเอ็นต์จะลบล้างผลประโยชน์นั้น คอขวดที่นี่จะเป็นแบนด์วิธในการย้ายไฟล์ไปยังเซิร์ฟเวอร์ - นี่เป็นค่าคงที่ในทั้งสองวิธี ตามกฎทั่วไป ให้เพิ่มประสิทธิภาพ หลังจาก คุณประสบปัญหา ดู ebay, youtube, meebo ฯลฯ เป็นตัวอย่างของแนวทางดังกล่าว - person Milimetric; 19.04.2011

ฉันพยายามเขียนถึงข้อดีบางประการเกี่ยวกับการทำเช่นนี้ในฝั่งไคลเอ็นต์ แต่ตามความเห็นของฉันจริงๆ คุณจะทำให้มันยากสำหรับตัวคุณเอง และคุณจะมั่นใจได้อย่างไรว่าแฮชที่คุณส่งมานั้นถูกสร้างขึ้นโดยคุณ? ใครๆ ก็สามารถใช้เครื่องมืออย่าง Firebug ได้อย่างง่ายดาย และเปลี่ยนโค้ดที่กำลังทำงานอยู่ (แก้ไขให้ถูกต้องหากฉันผิดเกี่ยวกับเรื่องนี้ ไม่เคยใช้จริง ๆ เลย) มัน :D ) นอกจากนี้ พวกเขายังสามารถสร้าง/ปลอมแปลงคำขอของตนเองและโพสต์ลงในไฟล์ PHP ของคุณได้ ดังนั้น คุณจะสูญเสียการควบคุมอย่างมาก

แล้วจะตรวจสอบข้อมูลอย่างไร? สร้างแฮชอื่นและตรวจสอบซึ่งกันและกัน ? แต่แล้วคุณก็ทำฝั่งเซิร์ฟเวอร์แล้ว!

ดังนั้นควรคิดถึงการรักษาฝั่งเซิร์ฟเวอร์การดำเนินการแฮชในตำแหน่งที่คุณควบคุมสภาพแวดล้อม และอัลกอริธึมการแฮชมีมานานหลายปีแล้ว ดังนั้นฉันแน่ใจว่าพวกเขาได้ปรับให้เหมาะสมค่อนข้างมาก และคุณจะมั่นใจได้ถึงความเข้ากันได้มากขึ้นสำหรับลูกค้าของคุณ

และหากคุณได้รับการเข้าชมมากพอจนแฮชเป็นประสิทธิภาพหลักที่ได้รับความนิยม อาจถึงเวลาอัปเกรดเป็นสิ่งที่ใหญ่กว่า ...

แต่อย่าเข้าใจฉันผิด สิ่งนี้เป็นไปได้และสมเหตุสมผล - http://www.movable-type.co.uk/scripts/sha1.html - แต่ฉันไม่สามารถเชื่อถือโซลูชันนี้ได้

person Johann du Toit    schedule 19.04.2011

จะเกิดอะไรขึ้นถ้า JavaScript ปิดอยู่? คุณไม่จำเป็นต้องพึ่งพา JavaScript ในการทำงานของคุณหากคุณทำฝั่งเซิร์ฟเวอร์ ควรใช้ทรัพยากรเซิร์ฟเวอร์เพิ่มเติมเพื่อรับประกัน 100% ว่ามันจะได้ผล!

person Gavin Rogers    schedule 19.04.2011