อย่างที่คนอื่นพูดคุณควรทำทั้งสองอย่าง นี่คือเหตุผล:
ด้านลูกค้า
คุณต้องการที่จะตรวจสอบการป้อนข้อมูลบนฝั่งไคลเอ็นต์แรกเพราะคุณสามารถให้ข้อเสนอแนะที่ดีกว่าที่จะใช้ค่าเฉลี่ย ตัวอย่างเช่นหากพวกเขาป้อนที่อยู่อีเมลที่ไม่ถูกต้องและย้ายไปที่ฟิลด์ถัดไปคุณสามารถแสดงข้อความแสดงข้อผิดพลาดได้ทันที วิธีนี้ทำให้ผู้ใช้สามารถแก้ไขทุกฟิลด์ก่อนส่งแบบฟอร์ม
หากคุณตรวจสอบความถูกต้องบนเซิร์ฟเวอร์พวกเขาจะต้องส่งแบบฟอร์มรับข้อความแสดงข้อผิดพลาดและพยายามตามหาปัญหา
(ความเจ็บปวดนี้สามารถปลดเปลื้องได้โดยการให้เซิร์ฟเวอร์แสดงผลฟอร์มอีกครั้งโดยป้อนข้อมูลต้นฉบับของผู้ใช้ แต่การตรวจสอบฝั่งไคลเอ็นต์ยังเร็วกว่า)
ฝั่งเซิร์ฟเวอร์
คุณต้องการตรวจสอบด้านเซิร์ฟเวอร์เพราะคุณสามารถป้องกันผู้ใช้ที่เป็นอันตรายซึ่งสามารถข้าม JavaScript ของคุณและส่งอินพุตอันตรายไปยังเซิร์ฟเวอร์ได้อย่างง่ายดาย
การไว้วางใจ UI ของคุณเป็นสิ่งที่อันตราย ไม่เพียง แต่พวกเขาสามารถละเมิด UI ของคุณ แต่พวกเขาอาจจะไม่ได้ใช้ UI ของคุณที่ทั้งหมดหรือแม้กระทั่งเบราว์เซอร์ จะเกิดอะไรขึ้นหากผู้ใช้แก้ไข URL ด้วยตนเองหรือเรียกใช้ Javascript ของตนเองหรือปรับแต่งคำร้องขอ HTTP ด้วยเครื่องมืออื่น จะทำอย่างไรถ้าพวกเขาส่งคำขอ HTTP ที่กำหนดเองจากcurl
หรือจากสคริปต์ตัวอย่างเช่น
( นี่ไม่ใช่เชิงทฤษฎีเช่นฉันทำงานกับเครื่องมือค้นหาการเดินทางที่ส่งการค้นหาของผู้ใช้ไปยังสายการบินพันธมิตรหลาย บริษัท รถบัส ฯลฯ โดยส่งPOST
คำขอราวกับว่าผู้ใช้กรอกฟอร์มการค้นหาของแต่ละ บริษัท แล้วรวบรวมและเรียงลำดับ ผลลัพธ์ทั้งหมดฟอร์ม JS ของ บริษัท เหล่านั้นไม่เคยดำเนินการและเป็นสิ่งสำคัญสำหรับเราที่พวกเขาให้ข้อความแสดงข้อผิดพลาดใน HTML ที่ส่งคืนแน่นอน API จะดี แต่นี่คือสิ่งที่เราต้องทำ )
การไม่อนุญาตให้ทำเช่นนั้นไม่เพียง แต่ไร้เดียงสาจากจุดยืนด้านความปลอดภัย แต่ยังไม่ได้มาตรฐาน: ลูกค้าควรได้รับอนุญาตให้ส่ง HTTP ด้วยวิธีใดก็ตามที่พวกเขาต้องการและคุณควรตอบสนองอย่างถูกต้อง นั่นรวมถึงการตรวจสอบ
การตรวจสอบด้านเซิร์ฟเวอร์นั้นมีความสำคัญสำหรับความเข้ากันได้ด้วย - ไม่ใช่ผู้ใช้ทุกคนถึงแม้ว่าพวกเขากำลังใช้เบราว์เซอร์ก็ตามจะเปิดใช้งาน JavaScript
ภาคผนวก - ธันวาคม 2559
มีการตรวจสอบบางอย่างที่ไม่สามารถทำได้อย่างถูกต้องในรหัสแอปพลิเคชันฝั่งเซิร์ฟเวอร์และเป็นไปไม่ได้อย่างเต็มที่ในรหัสฝั่งไคลเอ็นต์เนื่องจากขึ้นอยู่กับสถานะปัจจุบันของฐานข้อมูล ตัวอย่างเช่น "ไม่มีใครลงทะเบียนชื่อผู้ใช้นั้น" หรือ "โพสต์บล็อกที่คุณแสดงความคิดเห็นยังคงมีอยู่" หรือ "ไม่มีการจองที่มีอยู่ซ้อนทับวันที่คุณขอ" หรือ "ยอดเงินในบัญชีของคุณยังเพียงพอที่จะครอบคลุมการซื้อ ." มีเพียงฐานข้อมูลเท่านั้นที่สามารถตรวจสอบความถูกต้องของข้อมูลซึ่งขึ้นอยู่กับข้อมูลที่เกี่ยวข้อง นักพัฒนาประจำกรูขึ้นนี้แต่PostgreSQL ให้บริการโซลูชั่นที่ดีบางอย่าง