วิธีการสร้าง Form ป้องกันการโจมตีแบบ CSRF ใน Joomla
ในการสร้างฟอร์มเราก็จะต้องมีการส่งค่าที่ผู้ใช้งานกรอกเข้าไปเพื่อเอาไปทำการต่างๆไม่ว่าจะเอาไปเก็บไว้ลงฐานข้อมูลและเอาไปเพื่อกระทำการต่างๆที่เป็นเกี่ยวกับธุรกรรมทางการเงินหรือเป็นการ Login หรือ การเอาไปคำนวณต่างๆเราก็จะต้องป้องกันการโดนโจรกรรมข้อมูลจากผู้ที่ไม่หวังดีหรือพวกแฮกเกอร์ต่างโดยในการโจมตีของแฮกเกอร์ที่นิยมมาโจมดีเว็บไซต์จะโจมตีกันแบบ CSRF หรือ Cross-site Request Forgery (ครอส ไซต์ ริคเวซท์ ฟอร์เจอะรี) โดยตัว CSRF เป็นการโจมตีโดยการใช้ตัวตนและสิทธิ์ของเหยื่อที่มีบนเว็บไซต์โดยจะทำการปลอมตัวเป็นเหยื่อและกระทำการหรือธุรกรรมไม่พึงประโยชน์จากเหยื่อที่มีการ Login Cookies เก็บไว้ในเบราเซอร์ จึงทำให้เว็บไซต์ที่เป็นพวก E-Commerce หรือเว็บธนาคารต่างที่มีการส่ง Cookie ไปเก็บข้อมูลการพิสูจน์ตัวตนของผู้ใช้งานจึงทำให้ผู้ใช้งานตกเป็นเหยื่อของการโจมตีแบบ CSRF ไปได้จึงทำให้ผู้พัฒนาระบบเขียนโค้ดเพื่อป้องกันโดยการใช้ token เพื่อใช้ในการเช็คอีกทีนึง โดยสามารถเขียนโค้ดได้ดังนี้
วิธีการสร้าง Form ป้องกันการโจมตีแบบ CSRF ได้ดังนี้
- สร้างหน้าฟอร์มมาในไฟล์ default.php ที่อยู่ในโฟลเดอร์ tmpl ที่อยู่ในโฟลเดอร์ view อีกทีนึง
- จากนั้นเพิ่มโค้ด token ไปก่อนที่จะปิด <from> ดังโค้ดตัวอย่าง
<form action="<?php echo JRoute::_('index.php?option=com_test&view=testmindphp') ?>" method="post" name="adminForm" id="adminForm"> <input type="text" name="username"> <input type="password" name="password"> <input type="submit" name="submit"> <?php echo JHtml::_('form.token'); ?> </form>
- จากนั้นในไฟล์ .php ที่อยู่ในโฟลเดอร์ controllers จะต้องเพิ่มฟังก์ชันใน class ที่อยู่ในไฟล์นั้นและจากนั้นก็เพิ่มโค้ดเช็ค token อีกครั้งนึกว่าฟอร์มที่ทำการ Submit มามีการส่งค่า token มาด้วยไหมถ้าไม่มีการส่งค่า token มาตัว controllers ก็จะไม่ทำงานโดยเพิ่มดังโค้ด
Joomla\CMS\Factory::getSession()->checkToken() or die('Invalid Token');
เมื่อเรามีการสร้างฟอร์มเพื่อป้องกันการโจมตีแบบ CSRF แล้วก็สามารถป้องกันพวกแฮ็กเกอร์ได้แล้วเพราะถ้าหากฟอร์มนั้นไม่ส่งตัว token มาตัว controllers ก็จะไม่ทำงานและจะไม่อนุญาติให้ใช้งานได้
ช่องทางการศึกษาเพิ่มเติมข่าวที่น่าสนใจเกี่ยวกับ : Joomla
- คู่มือการใช้งาน Joomla Extension By Mindphp (50)
- สอบถามเกี่ยวกับ Joomla (246)
- ศึกษาข้อมูลเกี่ยวกับ Joomla (51)
- ศึกษาความรู้เกี่ยวกับ PHP (182)
- ถามตอบเกี่ยวกับ PHP (3856)