0Pricing
PHP Academy · บทเรียน

การป้องกัน CSRF

สร้างและตรวจสอบโทเค็น CSRF ในแบบฟอร์มเพื่อป้องกันคำขอปลอมแปลง

การป้องกัน CSRF เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

CSRF คืออะไร

Cross-Site Request Forgery (CSRF) หลอกให้ผู้ใช้ที่ผ่านการยืนยันตัวตนส่งการดำเนินการที่ไม่ต้องการ หน้าเว็บที่เป็นอันตรายจะส่งคำขอปลอมไปยังเว็บไซต์ของคุณโดยใช้เซสชันที่เหยื่อกำลังใช้งานอยู่

CSRF ทำงานอย่างไร

สถานการณ์สมมติ: Alice เข้าสู่ระบบ bank.com อยู่ จากนั้นเธอไปที่ malicious.com ซึ่งมีแบบฟอร์มซ่อนอยู่และส่งคำขอโอนเงินไปยัง bank.com โดยอัตโนมัติผ่านคุกกี้เซสชันของเธอ

โทเค็น CSRF

กลไกป้องกันคือโทเค็นลับเฉพาะแต่ละเซสชันที่ฝังอยู่ในทุกแบบฟอร์ม เซิร์ฟเวอร์จะตรวจสอบโทเค็นในคำขอ POST/PUT/PATCH/DELETE โดยคำขอปลอมจากต้นทางอื่นจะไม่สามารถอ่านโทเค็นได้

@csrf ใน Laravel Blade

เพิ่มคำสั่ง @csrf ในแบบฟอร์ม HTML ทุกแบบที่แก้ไขข้อมูล

<form method="POST" action="/transfer">
    @csrf
    <input name="amount" type="number">
    <button>Transfer</button>
</form>

มิดเดิลแวร์ CSRF

มิดเดิลแวร์ VerifyCsrfToken ของ Laravel จะตรวจสอบส่วนหัว X-CSRF-TOKEN หรือฟิลด์ _token ในคำขอที่ไม่ใช่ GET ทั้งหมดภายในกลุ่มมิดเดิลแวร์ web

CSRF สำหรับ AJAX

สำหรับคำขอ AJAX ให้อ่านโทเค็นจากเมตาแท็กแล้วส่งโทเค็นไปเป็นส่วนหัว

// In the HTML head:
<meta name="csrf-token" content="{{ csrf_token() }}">

// In JavaScript (Axios):
axios.defaults.headers.common["X-CSRF-TOKEN"] =
    document.querySelector("meta[name=csrf-token]").content;

การยกเว้นเส้นทาง

โดยทั่วไปเส้นทาง API ที่ใช้โทเค็นของ Sanctum จะได้รับการยกเว้นจากการป้องกัน CSRF เนื่องจากใช้การยืนยันตัวตนด้วยโทเค็นแทนคุกกี้

<?php
// In VerifyCsrfToken $except:
protected $except = [
    "api/*",
    "webhooks/*",
];

แอตทริบิวต์คุกกี้ SameSite

การตั้งค่า SameSite=Strict หรือ Lax ให้กับคุกกี้เซสชันจะเพิ่มชั้นการป้องกัน CSRF ในเบราว์เซอร์สมัยใหม่

รูปแบบคุกกี้ส่งซ้ำสองครั้ง

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

CSRF ในบริบทของ API

REST API ที่ยืนยันตัวตนด้วยโทเค็น Bearer เช่น Sanctum และ JWT จะไม่เสี่ยงต่อ CSRF เนื่องจากโทเค็นถูกจัดเก็บไว้ใน localStorage และเบราว์เซอร์จะไม่ส่งโทเค็นโดยอัตโนมัติ

การทดสอบ CSRF

ตัวช่วยการทดสอบของ Laravel จะใส่โทเค็น CSRF ให้อัตโนมัติ นอกจากนี้คุณยังทดสอบได้ว่าคำขอ POST ที่ไม่มีการป้องกันถูกปฏิเสธ

<?php
// With token:
$this->post("/transfer", ["_token" => csrf_token(), "amount" => 100]);
// Simulating CSRF attack (no token):
$this->withoutMiddleware(VerifyCsrfToken::class)->post("/transfer", [...]);

สรุป

การป้องกัน CSRF ต้องมีโทเค็นที่ซ่อนอยู่ในแบบฟอร์มทุกแบบที่เปลี่ยนแปลงสถานะ Laravel จัดการเรื่องนี้โดยอัตโนมัติด้วย @csrf สำหรับ AJAX ให้เพิ่มโทเค็นเป็นส่วนหัว HTTP เส้นทาง API ที่ใช้โทเค็น Bearer จะไม่ได้รับผลกระทบ

ตรวจสอบความเข้าใจอย่างรวดเร็ว

คุณจะเพิ่มการป้องกัน CSRF ให้กับแบบฟอร์ม Laravel Blade ได้อย่างไร

คำถามที่พบบ่อย

บทเรียน “การป้องกัน CSRF” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การป้องกัน CSRF” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การป้องกัน CSRF”

สร้างและตรวจสอบโทเค็น CSRF ในแบบฟอร์มเพื่อป้องกันคำขอปลอมแปลง คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การป้องกัน CSRF” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม

ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การป้องกัน Cross-Site Scripting (XSS)
  2. SQL Injection และคำสืบค้นแบบกำหนดพารามิเตอร์
  3. การป้องกัน CSRF
  4. การจัดเก็บรหัสผ่านอย่างปลอดภัย
← กลับไปที่ PHP Academy