การตรวจสอบข้อมูลป้อนเข้าและการเข้ารหัสข้อมูลส่งออก
ตรวจสอบข้อมูลป้อนเข้าทั้งหมดที่ฝั่งเซิร์ฟเวอร์ เข้ารหัสข้อมูลส่งออกให้เหมาะกับบริบท และป้องกันการแทรกคำสั่ง
การตรวจสอบข้อมูลป้อนเข้าและการเข้ารหัสข้อมูลส่งออก เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดการตรวจสอบข้อมูลนำเข้าจึงสำคัญ
ช่องโหว่จากการแทรกคำสั่ง — SQL คำสั่ง LDAP XPath และอื่น ๆ — เกิดขึ้นเมื่อข้อมูลนำเข้าที่ไม่น่าเชื่อถือถูกตีความเป็นโค้ด การตรวจสอบข้อมูลนำเข้าช่วยให้ข้อมูลเป็นไปตามชนิด ความยาว และรูปแบบที่คาดไว้ก่อนนำไปประมวลผล จัดเก็บ หรือส่งกลับ
การตรวจสอบด้วยรายการอนุญาตเทียบกับรายการปฏิเสธ
การตรวจสอบด้วยรายการอนุญาต (ไวต์ลิสต์) กำหนดสิ่งที่ IS ยอมรับได้ เช่น อนุญาตเฉพาะอักขระตัวอักษรและตัวเลข เฉพาะจำนวนเต็มในช่วง 1-100 หรือเฉพาะรูปแบบอีเมลที่ถูกต้อง การตรวจสอบด้วยรายการปฏิเสธ (บัญชีดำ) พยายามบล็อกข้อมูลนำเข้าที่ทราบว่าไม่ดี แต่ไม่เคยครอบคลุมทั้งหมด ควรเลือกใช้รายการอนุญาต
การตรวจสอบฝั่งเซิร์ฟเวอร์
การตรวจสอบฝั่งไคลเอนต์ช่วยปรับปรุงประสบการณ์ผู้ใช้ แต่ไม่ให้ความปลอดภัยเลย — ผู้โจมตีข้ามได้อย่างง่ายดายโดยใช้เครื่องมือสำหรับนักพัฒนาในเบราว์เซอร์หรือ curl ควรตรวจสอบฝั่งเซิร์ฟเวอร์เสมอ การตรวจสอบฝั่งไคลเอนต์เป็นเพียงความเอื้อเฟื้อ ส่วนการตรวจสอบฝั่งเซิร์ฟเวอร์คือกลไกควบคุมความปลอดภัย
การตรวจสอบข้อมูลนำเข้าสำหรับชนิดข้อมูลต่าง ๆ
ตัวเลข: ตรวจสอบชนิดและช่วงค่า สตริง: ตรวจสอบความยาวและชุดอักขระ วันที่: แยกวิเคราะห์อย่างเคร่งครัดและตรวจสอบช่วงค่า ไฟล์: ตรวจสอบส่วนขยาย AND ไบต์ลายเซ็น/ชนิด MIME — อย่าเชื่อถือส่วนขยายเพียงอย่างเดียว URL: แยกวิเคราะห์และตรวจสอบรูปแบบ โฮสต์ และองค์ประกอบเส้นทาง
คิวรีแบบมีพารามิเตอร์ป้องกัน SQLi
ผลลัพธ์ที่สำคัญที่สุดของการตรวจสอบข้อมูลนำเข้าสำหรับฐานข้อมูลคือ ห้ามนำข้อมูลนำเข้าของผู้ใช้ไปต่อสตริงเข้ากับ SQL เด็ดขาด ให้ใช้ query แบบมีพารามิเตอร์ (คำสั่งที่เตรียมไว้) โดยส่งข้อมูลนำเข้าของผู้ใช้เป็นพารามิเตอร์ ไม่ใช่แทรกลงในสตริง query
// WRONG:
const q = "SELECT * FROM users WHERE name = '" + name + "'";
// RIGHT:
const q = "SELECT * FROM users WHERE name = $1";
await client.query(q, [name]);บริบทของการเข้ารหัสผลลัพธ์
สตริงเดียวกันต้องใช้การเข้ารหัสต่างกันตามบริบท ส่วนเนื้อหา HTML: เข้ารหัส HTML (< > &) แอตทริบิวต์ HTML: การเข้ารหัสแอตทริบิวต์ HTML JavaScript: การหลีกอักขระใน JS พารามิเตอร์ URL: การเข้ารหัส URL (การเข้ารหัสแบบเปอร์เซ็นต์) การใช้การเข้ารหัสผิดประเภทเปิดช่องโหว่ที่ผู้โจมตีสามารถใช้ประโยชน์ได้
การเข้ารหัส HTML เพื่อป้องกัน XSS
อย่าแทรกข้อมูลผู้ใช้ลงใน HTML โดยตรง ให้ใช้เครื่องมือสร้างแม่แบบหรือไลบรารีที่หลีกอักขระ HTML โดยอัตโนมัติ ใน React, {value} ปลอดภัย ส่วน dangerouslySetInnerHTML จะข้ามการหลีกอักขระ ใน Django เทมเพลตจะหลีกอักขระโดยอัตโนมัติ เว้นแต่จะใช้ตัวกรอง safe อย่างชัดเจน
การเข้ารหัสบริบท JavaScript
เมื่อนำข้อมูลไปใส่ใน JavaScript (เช่น ตัวแปรที่เริ่มต้นด้วยข้อมูลผู้ใช้) การเข้ารหัส HTML ยังไม่เพียงพอ ให้ใช้การเข้ารหัส JSON: JSON.stringify(value) วิธีนี้ป้องกันไม่ให้ข้อมูลหลุดออกจากบริบทสตริงลิเทอรัลของ JS
การเข้ารหัส URL
ข้อมูลที่ผู้ใช้ส่งซึ่งนำไปใส่ใน URL ต้องเข้ารหัสแบบเปอร์เซ็นต์โดยใช้ encodeURIComponent() (JS) หรือ urllib.parse.quote() (Python) ข้อมูลที่ไม่ได้เข้ารหัสอาจเปลี่ยนแปลงโครงสร้าง URL จนนำไปสู่การเปลี่ยนเส้นทางแบบเปิดหรือการข้ามผ่านเส้นทาง
นโยบายความปลอดภัยเนื้อหาในฐานะการป้องกันหลายชั้น
CSP เพิ่มแนวป้องกันชั้นที่สองจาก XSS CSP ที่เข้มงวดซึ่งใช้ค่า nonce จะป้องกันการเรียกใช้สคริปต์แบบอินไลน์ แม้ว่าจะมีการแทรกส่วนข้อมูลโจมตี XSS เนื่องจากเบราว์เซอร์จะปฏิเสธการเรียกใช้สคริปต์ที่ไม่มีแอตทริบิวต์ nonce ที่ถูกต้อง
การป้องกัน XSS บน DOM
DOM XSS เกิดขึ้นเมื่อ JavaScript อ่านข้อมูลจากแหล่งที่ผู้โจมตีควบคุมได้ (location.hash, document.URL, cookie) แล้วเขียนข้อมูลลงในจุดรับข้อมูลที่เป็นอันตราย (innerHTML, document.write, eval) ควรตรวจสอบเส้นทางการไหลของข้อมูลทั้งหมดจาก API ของเบราว์เซอร์ไปยังจุดรับข้อมูลของ DOM โดยใช้เครื่องมือวิเคราะห์แบบคงที่
ตรวจสอบความรู้
เหตุใดการตรวจสอบข้อมูลนำเข้าฝั่งเซิร์ฟเวอร์จึงจำเป็น แม้จะมีการตรวจสอบฝั่งไคลเอนต์แล้ว
สรุป
การตรวจสอบข้อมูลนำเข้า (รายการอนุญาต การตรวจสอบชนิดข้อมูล การจำกัดความยาว) ร่วมกับการเข้ารหัสผลลัพธ์ตามบริบท (HTML, JS, URL และการใช้พารามิเตอร์ใน SQL) เป็นแนวป้องกันหลักจากการโจมตีแบบแทรกคำสั่งและ XSS ทั้งหมดนี้ต้องนำไปใช้ฝั่งเซิร์ฟเวอร์โดยไม่มีข้อยกเว้น
คำถามที่พบบ่อย
บทเรียน “การตรวจสอบข้อมูลป้อนเข้าและการเข้ารหัสข้อมูลส่งออก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การตรวจสอบข้อมูลป้อนเข้าและการเข้ารหัสข้อมูลส่งออก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การตรวจสอบข้อมูลป้อนเข้าและการเข้ารหัสข้อมูลส่งออก”
ตรวจสอบข้อมูลป้อนเข้าทั้งหมดที่ฝั่งเซิร์ฟเวอร์ เข้ารหัสข้อมูลส่งออกให้เหมาะกับบริบท และป้องกันการแทรกคำสั่ง คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การตรวจสอบข้อมูลป้อนเข้าและการเข้ารหัสข้อมูลส่งออก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cyber Security Academy นี้ได้ไหม
ได้ บทเรียน Cyber Security Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตรวจสอบข้อมูลป้อนเข้าและการเข้ารหัสข้อมูลส่งออก
- การจัดการส่วนพึ่งพาอย่างปลอดภัย
- OWASP ASVS: มาตรฐานตรวจสอบความปลอดภัยแอปพลิเคชัน
- เทคนิคการตรวจสอบโค้ดอย่างปลอดภัย