Cross-Site Request Forgery (CSRF) หรือการปลอมแปลงคำร้องขอระหว่างเว็บไซต์หนึ่งเป็นอีกเว็บไซต์หนึ่ง เป็นเหมือนตัวร้ายในโลกของการพัฒนาเว็บแอปพลิเคชั่นที่เราต้องรู้จักและหลีกเลี่ยงเขาให้ได้ จะให้เห็นภาพง่ายๆ ก็คือเหมือนกับว่ามีคนไม่ดีได้นำชื่อและที่อยู่ของเราไปใช้โดยที่เราไม่รู้ตัว เพื่อทำการสั่งซื้อของหรือทำการที่มีผลเสียต่อเรานั่นเอง
หากเรามองในด้านการเขียนโปรแกรม การรู้จักตัวร้ายแบบ CSRF นี้มีความสำคัญมาก เพราะมันช่วยให้เราสร้างเว็บไซต์ที่มีความปลอดภัย ไม่ให้คนไม่ดีมีโอกาสทำร้ายผู้ใช้งานเว็บไซต์ของเราได้ง่ายๆ
ยกตัวอย่างเรื่องง่ายๆ ก่อนนะครับ สมมติว่าเด็กอายุ 8 ขวบคนหนึ่งได้รับคำสั่งจากพ่อแม่ว่า "ถ้ามีคนมากดกริ่งบ้าน เธอต้องเปิดประตูให้" เด็กคนนี้ก็จะเปิดประตูบ้านทันทีที่มีคนมากดกริ่ง แต่วันหนึ่งมีคนร้ายแอบมากดกริ่งแล้วบอกว่า "พ่อแม่สั่งมาให้เอาของนี้ไปด้วย" เด็กคนนั้นก็อาจจะเปิดประตูและรับของจากคนไม่ดีนั้นไปโดยไม่สงสัย
เหมือนกับในโลกอินเทอร์เน็ต ตัวร้ายอย่าง CSRF ก็ทำให้เว็บไซต์รับคำสั่งจากเว็บไซต์อื่นโดยที่ไม่ได้ตรวจสอบว่าคำสั่งนั้นมาจากผู้ใช้จริงๆหรือไม่ ทำให้มีโอกาสที่จะสั่งเว็บไซต์ให้ทำการที่มีผลเสียต่อผู้ใช้งานได้
เพื่อป้องกันปัญหานี้ นักพัฒนาต้องมีการใช้เทคนิคพิเศษในการเขียนโปรแกรม เช่นการตรวจสอบค่า token ซึ่งเป็นค่าเฉพาะที่ถูกสร้างขึ้นมาเพื่อแต่ละการกระทำ ค่า token นี้จะทำให้แน่ใจว่าคำสั่งที่ส่งมานั้นมาจากผู้ใช้ที่แท้จริง ไม่ใช่คนร้ายที่เข้ามาก่อกวน
ตัวอย่างโค้ดแบบง่ายๆ เพื่อต่อต้าน CSRF คือการใช้ token ในฟอร์ม HTML:
ในบรรดาฟังก์ชั่นทางด้านหลังบ้านหรือ server-side นั้นเราจะมีการสร้าง `TOKEN_GENERATED_BY_SERVER` ขึ้นมา และเมื่อมีการส่งฟอร์มกลับมา เราจะตรวจสอบค่า token ว่าตรงกับค่าที่เราสร้างขึ้นไว้ในเซิร์ฟเวอร์หรือไม่ ถ้าไม่ตรงก็รู้เลยว่ามีการพยายามทำ CSRF
การเข้าใจ CSRF และวิธีการป้องกันไม่เพียงแต่ช่วยให้เว็บไซต์ของเราปลอดภัย แต่ยังแสดงให้เห็นถึงความรู้ความเข้าใจที่ลึกซึ้งของนักพัฒนาในการสร้างเว็บที่มั่นคงและเชื่อถือได้
การรู้เรื่องเหล่านี้ไม่เพียงแต่ทำให้เราเป็นนักพัฒนาที่ดีขึ้น แต่ยังเป็นขั้นตอนหนึ่งในการเตรียมตัวเข้าสู่โลกที่เต็มไปด้วยความท้าทาย ซึ่งที่ EPT เรามุ่งมั่นที่จะพัฒนาความรู้และทักษะเหล่านี้ให้กับนักเรียนทุกคน เพราะเราเชื่อว่าความรู้ที่ถูกต้องคือพื้นฐานสำคัญที่จะนำไปสู่การสร้างสรรค์ผลงานที่ยั่งยืนและปลอดภัยในโลกออนไลน์.
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM