ห้องทดลอง SQL Injection

ดูว่าการสร้าง SQL แบบไม่ปลอดภัยเปลี่ยนคิวรีอย่างไร และการผูกค่ารักษาค่าให้เป็นข้อมูลได้อย่างไร

ห้องทดลองเพื่อการเรียนรู้เชิงป้องกัน: คิวรีทำงานกับข้อมูลปลอมในตัวบนฐานข้อมูล SQLite ในหน่วยความจำเท่านั้น ไม่มี URL หรือเป้าหมายภายนอก

อินพุต

คำสั่ง SQL หนึ่งคำสั่ง โดยใส่ {{value}} เพียงครั้งเดียวตรงตำแหน่งค่าของผู้ใช้

ให้ถือว่าเป็นอินพุตที่ไม่น่าเชื่อถือจากฟอร์ม URL หรือคำขอ API

บริบทของตัวยึดตำแหน่ง
ลิเทอรัลข้อความ

ข้อมูลตั้งต้น (ปลอม): users(id, email, role) 5 แถว และ orders(id, user_id, amount) 6 แถว แต่ละฝั่งใช้สำเนาของตัวเอง

SQL Injection Safety Lab ทำอะไรได้

SQL Injection Safety Lab แสดงเทียบกันว่าเกิดอะไรขึ้นเมื่อนำค่าที่ผู้ใช้ควบคุมไปวางในข้อความ SQL เทียบกับเมื่อผูกเป็นพารามิเตอร์ คิวรีที่ไม่ปลอดภัยจะไฮไลต์อักขระของค่าที่ถูกอ่านเป็น SQL (เครื่องหมายคำพูดที่ถูกปิด เงื่อนไข OR ที่เพิ่มเข้ามา คอมเมนต์ อนุประโยคเพิ่มเติม) ส่วนคิวรีแบบพารามิเตอร์จะคงข้อความ SQL ไว้และแสดงค่าแยกต่างหากในฐานะข้อมูล นี่คือเครื่องมือเรียนรู้เชิงป้องกัน ไม่ใช่เครื่องสแกนช่องโหว่ ไม่มีการป้อน URL และไม่มีเป้าหมายภายนอก

วิธีใช้งาน
  1. 1.โหลดตัวอย่าง หรือเขียนคำสั่ง SQL หนึ่งคำสั่งที่มี {{value}} เพียงครั้งเดียว
  2. 2.พิมพ์ค่าที่ผู้ใช้ควบคุม คิวรีที่ไม่ปลอดภัย คิวรีแบบพารามิเตอร์ และคำอธิบายจะอัปเดตขณะพิมพ์
  3. 3.เลือก "เรียกใช้การเปรียบเทียบ" เพื่อรันทั้งสองคิวรีกับข้อมูลตั้งต้นปลอมในแซนด์บ็อกซ์ SQLite ในหน่วยความจำ แล้วเปรียบเทียบแถวที่คืนค่าหรือถูกเปลี่ยน
  4. 4.เปิด "โค้ดที่ปลอดภัย" เพื่อคัดลอกเวอร์ชันแบบพารามิเตอร์สำหรับ PostgreSQL, MySQL, SQLite หรือ SQL Server ในภาษา SQL, JavaScript/TypeScript, Python, PHP, Java หรือ Go
  5. 5."รีเซ็ตฐานข้อมูล" คืนข้อมูลตั้งต้นหลังจากมีการเขียนข้อมูล
การผูกค่าและรายการอนุญาตสำหรับตัวระบุ

ค่าต้องอยู่ในพารามิเตอร์: PostgreSQL ใช้ $1, MySQL และ SQLite ใช้ ?, SQL Server ใช้ @p1 และไดรเวอร์แต่ละตัวมีธรรมเนียมของตัวเอง เช่น %s ใน psycopg หรือ :name ใน PDO ห้องทดลองทำตามแต่ละไดรเวอร์เมื่อสร้างโค้ด ชื่อตาราง ชื่อคอลัมน์ และฟิลด์ ORDER BY ผูกเป็นพารามิเตอร์ไม่ได้ เส้นทางที่ปลอดภัยจึงจับคู่อินพุตกับตัวระบุคงที่จากรายการอนุญาตและปฏิเสธทุกอย่างที่เหลือ แท็บตัวตรวจโค้ดค้นหา SQL ที่สร้างด้วยการแทรกค่า การจัดรูปแบบ หรือการต่อสตริงในโค้ดที่วาง และรายงานแต่ละรายการเป็นความเสี่ยง SQL Injection ที่อาจเกิดขึ้น เพราะไม่ได้ติดตามว่าค่ามาจากไหน

แซนด์บ็อกซ์ ข้อจำกัด และความเป็นส่วนตัว

มีเพียง SQLite ที่ถูกรัน ภายใน Web Worker โดยใช้ sql.js เวอร์ชัน WebAssembly ที่โฮสต์เอง แต่ละฝั่งของการเปรียบเทียบใช้สำเนา users และ orders ปลอมในหน่วยความจำของตัวเอง การเขียนที่ไม่ปลอดภัยจึงไม่กระทบผลลัพธ์ฝั่งที่ปลอดภัย รันฝั่งละหนึ่งคำสั่ง คำสั่งที่ซ้อนกันจะถูกรายงานแทนการรัน คิวรีหยุดหลัง 3 วินาที ผลลัพธ์แสดงสูงสุด 100 แถวและ 16 คอลัมน์ เทมเพลตจำกัด 4,000 อักขระ และค่าจำกัด 500 อักขระ สนิปเพตของ PostgreSQL, MySQL และ SQL Server ใช้อ้างอิงเท่านั้น เทมเพลต ค่า และโค้ดอยู่ในเบราว์เซอร์ของคุณและไม่ถูกส่งไปยังเซิร์ฟเวอร์หรือระบบวิเคราะห์

CodingTool เปิดตัวอย่างเป็นทางการบน

Launched on StartupBaseCodingTool.dev - Free, Fast & Easy Developer Tools in One Place | Product HuntCodingTool - Featured on Startup FameFazier badgeListed on Turbo0Featured on Twelve ToolsFeatured on Findly.toolsLaunchpadly Startup DirectoryCodingTool.dev — Featured on Smol Launch