0Pricing
Cyber Security Academy · บทเรียน

SQL Injection: ทำงานอย่างไรและเพราะเหตุใด

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

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

การฉีดคำสั่ง SQL คืออะไร

การฉีดคำสั่ง SQL (SQLi) เกิดขึ้นเมื่อข้อมูลขาเข้าจากผู้ใช้ถูกนำไปรวมในคำสั่ง SQL โดยไม่มีการทำความสะอาดอย่างเหมาะสม ทำให้ผู้โจมตีสามารถเปลี่ยนแปลงตรรกะของคำสั่งได้ นี่เป็นหนึ่งในช่องโหว่เว็บที่เก่าแก่และสร้างความเสียหายมากที่สุด

การทำงานของการฉีดคำสั่ง SQL

ฟอร์มเข้าสู่ระบบเรียกใช้คำสั่ง: SELECT * FROM users WHERE username='INPUT' AND password='INPUT'

หากผู้โจมตีป้อน ' OR 1=1-- เป็นชื่อผู้ใช้ คำสั่งจะกลายเป็น: SELECT * FROM users WHERE username='' OR 1=1--' AND password='...' — ซึ่งจะส่งคืนข้อมูลผู้ใช้ทั้งหมด

ประเภทของการฉีดคำสั่ง SQL

รูปแบบของการฉีด SQL:

  • ในช่องทางเดียวกัน: ผลลัพธ์ถูกส่งกลับโดยตรงในคำตอบ (แบบคลาสสิก แบบอาศัยข้อผิดพลาด)
  • บูลีนแบบตาบอด: ไม่มีผลลัพธ์โดยตรง อนุมานข้อมูลจากคำตอบจริง/เท็จ
  • อาศัยเวลาแบบตาบอด: อนุมานข้อมูลจากความล่าช้าของคำตอบ (SLEEP(5))
  • นอกช่องทาง: ข้อมูลถูกนำออกผ่านคำขอ DNS/HTTP

การฉีดแบบอาศัย UNION

การโจมตีด้วย UNION จะผนวกผลลัพธ์จากคำสั่งที่ผู้โจมตีควบคุม:

-- Discover number of columns:
id=1 ORDER BY 3--
-- Extract data:
id=1 UNION SELECT username,password,NULL FROM users--

การฉีดแบบอาศัยข้อผิดพลาด

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

การฉีด SQL แบบตาบอด

เมื่อไม่มีผลลัพธ์ที่มองเห็นได้ ผู้โจมตีจะใช้เงื่อนไขบูลีน:

-- If admin exists, page loads normally:
id=1 AND (SELECT COUNT(*) FROM users WHERE username='admin')=1--
-- Time-based:
id=1; IF(1=1) WAITFOR DELAY '0:0:5'--

sqlmap: การฉีด SQL แบบอัตโนมัติ

sqlmap ช่วยทำให้การตรวจหาและใช้ประโยชน์จากการฉีด SQL เป็นไปโดยอัตโนมัติ สามารถดัมป์ฐานข้อมูล อ่านไฟล์ และแม้แต่เรียกใช้คำสั่ง OS ได้ หากผู้ใช้ฐานข้อมูลมีสิทธิ์เพียงพอ

sqlmap -u "http://target.com/page?id=1" --dbs
sqlmap -u "http://target.com/page?id=1" -D webapp -T users --dump

การป้องกันการฉีด SQL: คำสั่งแบบมีพารามิเตอร์

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

# Python (safe):
cursor.execute("SELECT * FROM users WHERE username = %s", (username,))
# Node.js (safe):
pool.query("SELECT * FROM users WHERE id = $1", [userId])

การป้องกันด้วย ORM

การใช้ ORM (SQLAlchemy, Hibernate, Sequelize) โดยทั่วไปจะป้องกันการฉีด SQL ได้ เพราะคำสั่งถูกสร้างผ่านนามธรรมที่ปลอดภัย อย่างไรก็ตาม เมธอดคำสั่งดิบ (execute(), query()) ที่แทรกสตริงจะหลีกเลี่ยงการป้องกันของ ORM

การตรวจสอบข้อมูลขาเข้าและ WAF

การป้องกันเพิ่มเติม:

  • ตรวจสอบและอนุญาตเฉพาะประเภทข้อมูลที่กำหนด (จำนวนเต็ม อีเมล)
  • ใช้ไฟร์วอลล์สำหรับเว็บแอปพลิเคชัน (WAF) เพื่อตรวจหารูปแบบการฉีด
  • ใช้บัญชีฐานข้อมูลที่มีสิทธิ์น้อยที่สุด (ไม่มี DROP และไม่มี UNION สำหรับคำสั่งแบบอ่านอย่างเดียว)
  • ใช้กระบวนงานที่จัดเก็บไว้ (ช่วยลดพื้นที่เสี่ยง แต่ไม่ใช่ทางแก้ไขที่สมบูรณ์)

ผลกระทบของการฉีด SQL

การฉีด SQL ที่สำเร็จอาจทำให้เกิดสิ่งต่อไปนี้: ดัมป์ฐานข้อมูลทั้งหมด การข้ามขั้นตอนยืนยันตัวตน การแก้ไขหรือลบข้อมูล การอ่านไฟล์ของเซิร์ฟเวอร์ (LOAD_FILE) การเขียนเว็บเชลล์ และการเรียกใช้คำสั่ง OS ผ่าน xp_cmdshell (MSSQL)

ตรวจสอบอย่างรวดเร็ว: การโจมตีแบบฉีดคำสั่งเอสคิวแอล

การป้องกันหลักจากการโจมตีแบบฉีดคำสั่งเอสคิวแอลคืออะไร

สรุปบทเรียน

การโจมตีแบบฉีดคำสั่งเอสคิวแอลใช้ข้อมูลนำเข้าจากผู้ใช้ที่ไม่ได้ทำให้ปลอดภัยเพื่อควบคุมคำสั่งสอบถามฐานข้อมูล ประเภทการโจมตี ได้แก่ แบบคลาสสิก แบบบูลีนเชิงอนุมาน แบบอิงเวลา และแบบ UNION การป้องกันหลักคือการใช้คำสั่งสอบถามแบบกำหนดพารามิเตอร์ — ห้ามนำข้อมูลนำเข้าจากผู้ใช้มาต่อเข้ากับคำสั่งเอสคิวแอลโดยเด็ดขาด ใช้เครื่องมือแปลงวัตถุกับฐานข้อมูลอย่างระมัดระวัง ใช้บัญชีฐานข้อมูลที่มีสิทธิ์น้อยที่สุด และปิดใช้ข้อความแสดงข้อผิดพลาดโดยละเอียด

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

บทเรียน “SQL Injection: ทำงานอย่างไรและเพราะเหตุใด” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “SQL Injection: ทำงานอย่างไรและเพราะเหตุใด”

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

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

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

บทเรียน “SQL Injection: ทำงานอย่างไรและเพราะเหตุใด” ใช้เวลานานแค่ไหน

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

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

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

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

  1. SQL Injection: ทำงานอย่างไรและเพราะเหตุใด
  2. Cross-Site Scripting (XSS)
  3. Cross-Site Request Forgery (CSRF)
  4. การกำหนดค่าความปลอดภัยผิดพลาดและบริการที่เปิดเผย
← กลับไปที่ Cyber Security Academy