การป้องกัน CSRF และขั้นตอน POST
จัดการวงจรส่งข้อมูลแบบ GET/POST อย่างปลอดภัย
การป้องกัน CSRF และขั้นตอน POST เป็นบทเรียน Django Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Django Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Django Academy มีบทเรียนทั้งหมด 4 บทเรียน
CSRF คืออะไร
CSRF หลอกให้ผู้ใช้ที่เข้าสู่ระบบส่งคำขอที่ซ่อนอยู่ Django จะบล็อกการกระทำนี้เพื่อไม่ให้ผู้โจมตีดำเนินการแทนผู้ใช้ได้ 🔒
เปิดใช้การป้องกันแล้ว
Django เปิดใช้ CsrfViewMiddleware โดยค่าเริ่มต้น ดังนั้นคำขอ POST ที่ไม่มีการป้องกันจะถูกปฏิเสธจนกว่าคุณจะเพิ่มโทเค็นที่ถูกต้อง
แท็ก csrf_token
เพิ่ม {% csrf_token %} ภายในฟอร์ม POST ทุกฟอร์ม แท็กนี้จะแทรกฟิลด์ที่ซ่อนอยู่พร้อมโทเค็นลับเฉพาะเซสชัน
<form method="post">
{% csrf_token %}
</form>เหตุผลที่ใช้ได้ผล
โทเค็นพิสูจน์ว่าคำขอมาจาก หน้าของคุณเอง ฟอร์มปลอมจากเว็บไซต์อื่นไม่สามารถเดาโทเค็นได้ ดังนั้น POST จึงล้มเหลว
GET แสดงฟอร์ม
คำขอ GET จะแสดงฟอร์มเปล่าที่ยังไม่ผูกข้อมูล เพื่อให้ผู้ใช้เริ่มป้อนข้อมูล
if request.method == "GET":
form = ContactForm()POST ส่งข้อมูล
POST จะส่งค่าที่กรอกแล้วกลับมา คุณต้องผูกค่าเหล่านั้นเข้ากับฟอร์มและตรวจสอบความถูกต้องก่อนดำเนินการใด ๆ
if request.method == "POST":
form = ContactForm(request.POST)ตรวจสอบก่อนดำเนินการ
หากฟอร์มที่ผูกข้อมูลมี is_valid() เป็นจริง ให้ประมวลผล cleaned_data เช่น บันทึกข้อมูล ส่งอีเมล หรือดำเนินการตามจุดประสงค์ของฟอร์ม
if form.is_valid():
save(form.cleaned_data)เปลี่ยนเส้นทางหลังสำเร็จ
เมื่อสำเร็จ ให้เปลี่ยนเส้นทางไปยัง URL ใหม่ รูปแบบ Post/Redirect/Get นี้ช่วยป้องกันไม่ให้การรีเฟรชส่งข้อมูลซ้ำ
return redirect("thanks")แสดงผลใหม่เมื่อเกิดข้อผิดพลาด
หากการตรวจสอบไม่ผ่าน ให้แสดงเทมเพลตเดิมอีกครั้งพร้อมฟอร์มที่ผูกข้อมูลไว้ ฟอร์มยังคงเก็บข้อมูลที่ป้อนและแสดงข้อผิดพลาดแต่ละรายการ
return render(request, "contact.html",
{"form": form})รูปแบบทั้งหมด
รูปแบบที่ใช้ GET เพื่อแสดงผลและ POST เพื่อประมวลผลนี้คือมุมมองฟอร์มมาตรฐาน มุมมองเดียวรองรับทั้งสองเมธอดได้อย่างเป็นระเบียบ
form = ContactForm(request.POST or None)
if form.is_valid():
return redirect("thanks")ระวังคำขอ AJAX
คำขอ POST จาก JavaScript ต้องส่งโทเค็นในส่วนหัว X-CSRFToken โดยอ่านค่าจากคุกกี้ csrftoken มิฉะนั้น Django จะปฏิเสธคำขอ
ตรวจสอบอย่างรวดเร็ว
ตรวจสอบความรู้ของคุณเกี่ยวกับ CSRF และ POST
ทบทวน
เพิ่ม csrf_token ในฟอร์ม POST ทุกฟอร์ม GET ใช้แสดงฟอร์ม ส่วน POST ใช้ตรวจสอบฟอร์ม จากนั้นให้เปลี่ยนเส้นทางเมื่อสำเร็จ หรือแสดงผลใหม่เมื่อเกิดข้อผิดพลาด ✅
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “การป้องกัน CSRF และขั้นตอน POST” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การป้องกัน CSRF และขั้นตอน POST” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Django Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Django Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การป้องกัน CSRF และขั้นตอน POST”
จัดการวงจรส่งข้อมูลแบบ GET/POST อย่างปลอดภัย คุณปฏิบัติ Django Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Django Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Django Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การป้องกัน CSRF และขั้นตอน POST” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Django Academy นี้ได้ไหม
ได้ บทเรียน Django Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- กำหนด forms.Form
- is_valid และ cleaned_data
- แสดงผลฟอร์มในเทมเพลต
- การป้องกัน CSRF และขั้นตอน POST