Laravel - การป้องกัน CSRF

CSRF หมายถึงการโจมตี Cross Site Forgery บนเว็บแอปพลิเคชัน การโจมตี CSRF เป็นกิจกรรมที่ไม่ได้รับอนุญาตซึ่งผู้ใช้ที่ได้รับการพิสูจน์ตัวตนของระบบดำเนินการ ด้วยเหตุนี้เว็บแอปพลิเคชันจำนวนมากจึงมีแนวโน้มที่จะถูกโจมตีเหล่านี้

Laravel เสนอการป้องกัน CSRF ด้วยวิธีต่อไปนี้ -

Laravel มีปลั๊กอิน CSRF ในตัวซึ่งสร้างโทเค็นสำหรับแต่ละเซสชันของผู้ใช้ที่ใช้งานอยู่ โทเค็นเหล่านี้ตรวจสอบว่าการดำเนินการหรือการร้องขอถูกส่งโดยผู้ใช้ที่ได้รับการพิสูจน์ตัวตนที่เกี่ยวข้อง

การนำไปใช้

การดำเนินการป้องกัน CSRF ใน Laravel จะกล่าวถึงโดยละเอียดในส่วนนี้ ประเด็นต่อไปนี้เป็นสิ่งที่น่าสังเกตก่อนที่จะดำเนินการต่อในการป้องกัน CSRF -

  • CSRF ถูกนำไปใช้ภายในรูปแบบ HTML ที่ประกาศไว้ในเว็บแอปพลิเคชัน คุณต้องรวมโทเค็น CSRF ที่ตรวจสอบแล้วที่ซ่อนอยู่ในแบบฟอร์มเพื่อให้มิดเดิลแวร์การป้องกัน CSRF ของ Laravel สามารถตรวจสอบคำขอได้ ไวยากรณ์ดังแสดงด้านล่าง -

<form method = "POST" action="/profile">
   {{ csrf_field() }}
   ...
</form>
  • คุณสามารถสร้างแอปพลิเคชันที่ขับเคลื่อนด้วย JavaScript ได้อย่างสะดวกโดยใช้ไลบรารี JavaScript HTTP เนื่องจากมีโทเค็น CSRF สำหรับทุกคำขอที่ส่งออก

  • ไฟล์คือ resources/assets/js/bootstrap.js ลงทะเบียนโทเค็นทั้งหมดสำหรับแอปพลิเคชัน Laravel และรวมถึง meta tag ร้านไหน csrf-token ด้วย Axios HTTP library.

แบบฟอร์มที่ไม่มีโทเค็น CSRF

พิจารณาโค้ดบรรทัดต่อไปนี้ แสดงรูปแบบที่ใช้สองพารามิเตอร์เป็นอินพุต:email และ message.

<form>
   <label> Email </label>
      <input type = "text" name = "email"/>
      <br/>
   <label> Message </label> <input type="text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

ผลลัพธ์ของโค้ดด้านบนคือรูปแบบที่แสดงด้านล่างซึ่งผู้ใช้ปลายทางสามารถดูได้ -

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

โปรดทราบว่าปุ่มส่งมีฟังก์ชันการทำงานในส่วนคอนโทรลเลอร์ postContactฟังก์ชันถูกใช้ในตัวควบคุมสำหรับมุมมองที่เกี่ยวข้องนั้น ดังแสดงด้านล่าง -

public function postContact(Request $request) {
   return $request-> all();
}

สังเกตว่าแบบฟอร์มไม่มีโทเค็น CSRF ใด ๆ ดังนั้นข้อมูลที่ละเอียดอ่อนที่แชร์เป็นพารามิเตอร์อินพุตจึงมีแนวโน้มที่จะถูกโจมตีต่างๆ

แบบฟอร์มด้วยโทเค็น CSRF

โค้ดบรรทัดต่อไปนี้แสดงให้คุณเห็นแบบฟอร์มที่ออกแบบใหม่โดยใช้โทเค็น CSRF -

<form method = ”post” >
   {{ csrf_field() }}
   <label> Email </label>
   <input type = "text" name = "email"/>
   <br/>
   <label> Message </label>
   <input type = "text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

ผลลัพธ์ที่ได้จะส่งคืน JSON พร้อมโทเค็นตามที่ระบุด้านล่าง -

{
   "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
   "name": "TutorialsPoint",
   "email": "[email protected]"
}

นี่คือโทเค็น CSRF ที่สร้างขึ้นเมื่อคลิกปุ่มส่ง