ผลกระทบ
การปลอมแปลงคำขอข้ามไซต์ (CSRF) ช่วยให้ผู้โจมตีสามารถหลอกเบราว์เซอร์ของเหยื่อให้ดำเนินการที่ไม่พึงประสงค์บนเว็บไซต์อื่นที่เหยื่อได้รับการรับรองความถูกต้องในปัจจุบัน เนื่องจากเบราว์เซอร์จะรวมข้อมูลประจำตัวโดยอัตโนมัติ เช่น คุกกี้ ในคำขอ ผู้โจมตีจึงสามารถปลอมแปลงการดำเนินการที่เปลี่ยนแปลงสถานะ เช่น การเปลี่ยนรหัสผ่าน การลบข้อมูล หรือการเริ่มต้นธุรกรรม โดยที่ผู้ใช้ไม่รู้ตัว
ต้นเหตุ
สาเหตุพื้นฐานของ CSRF คือพฤติกรรมเริ่มต้นของเว็บเบราว์เซอร์ในการส่งคุกกี้ที่เชื่อมโยงกับโดเมนทุกครั้งที่มีการร้องขอไปยังโดเมนนั้น โดยไม่คำนึงถึงต้นกำเนิดของคำขอ [S1] หากไม่มีการตรวจสอบเฉพาะเจาะจงว่าคำขอถูกกระตุ้นโดยเจตนาจากอินเทอร์เฟซผู้ใช้ของแอปพลิเคชันเอง เซิร์ฟเวอร์ก็ไม่สามารถแยกแยะระหว่างการดำเนินการของผู้ใช้ที่ถูกต้องกับการดำเนินการของผู้ใช้ปลอมได้
กลไกการป้องกัน Django CSRF
Django มีระบบป้องกันในตัวเพื่อลดความเสี่ยงเหล่านี้ผ่านการรวมมิดเดิลแวร์และเทมเพลต [S2]
การเปิดใช้งานมิดเดิลแวร์
django.middleware.csrf.CsrfViewMiddleware รับผิดชอบการป้องกัน CSRF และโดยทั่วไปจะเปิดใช้งานโดยค่าเริ่มต้น [S2] จะต้องวางตำแหน่งก่อนมิดเดิลแวร์มุมมองใดๆ ที่ถือว่าการโจมตี CSRF ได้รับการจัดการแล้ว [S2]
การใช้งานเทมเพลต
สำหรับแบบฟอร์ม POST ภายในใดๆ นักพัฒนาจะต้องรวมแท็ก {% csrf_token %} ไว้ในองค์ประกอบ <form> [S2] เพื่อให้แน่ใจว่าโทเค็นลับที่ไม่ซ้ำกันจะรวมอยู่ในคำขอ ซึ่งเซิร์ฟเวอร์จะตรวจสอบกับเซสชันของผู้ใช้
ความเสี่ยงการรั่วไหลของโทเค็น
รายละเอียดการใช้งานที่สำคัญคือไม่ควรรวม {% csrf_token %} ในรูปแบบที่กำหนดเป้าหมาย URL ภายนอก ZXCVFIXVIBTOKEN1ZXCV การทำเช่นนี้จะทำให้โทเค็น CSRF ลับรั่วไหลไปยังบุคคลที่สาม ซึ่งอาจส่งผลต่อความปลอดภัยของเซสชันของผู้ใช้ [S2]
การป้องกันระดับเบราว์เซอร์: คุกกี้ SameSite
เบราว์เซอร์สมัยใหม่ได้แนะนำคุณลักษณะ SameSite สำหรับส่วนหัว Set-Cookie เพื่อจัดเตรียมชั้นของการป้องกันในเชิงลึก ZXCVFIXVIBTOKEN2ZXCV
- เข้มงวด: คุกกี้จะถูกส่งเฉพาะในบริบทของบุคคลที่หนึ่งเท่านั้น ซึ่งหมายความว่าไซต์ในแถบ URL ตรงกับโดเมนของคุกกี้ [S1]
- Lax: คุกกี้จะไม่ถูกส่งไปยังคำขอย่อยข้ามไซต์ (เช่น รูปภาพหรือเฟรม) แต่จะถูกส่งเมื่อผู้ใช้นำทางไปยังไซต์ต้นทาง เช่น โดยไปตามลิงก์มาตรฐาน [S1]
วิธีทดสอบ FixVibe
ขณะนี้ FixVibe มีการป้องกัน CSRF เป็นการตรวจสอบแบบมีรั้วรอบขอบชิด หลังจากการตรวจสอบโดเมนแล้ว active.csrf-protection จะตรวจสอบแบบฟอร์มที่มีการเปลี่ยนแปลงสถานะที่ค้นพบ ตรวจสอบอินพุตรูปโทเค็น CSRF และสัญญาณคุกกี้ SameSite จากนั้นพยายามส่งแหล่งกำเนิดปลอมแปลงที่มีผลกระทบต่ำ และรายงานเฉพาะเมื่อเซิร์ฟเวอร์ยอมรับเท่านั้น การตรวจสอบคุกกี้ยังทำเครื่องหมายแอตทริบิวต์ SameSite ที่อ่อนแอซึ่งจะลดการป้องกันเชิงลึกของ CSRF
