ตัวทดสอบ SQL Injection
เครื่องมือเพื่อการศึกษาเพื่อทำความเข้าใจการโจมตี SQL injection และเรียนรู้วิธีป้องกันด้วย parameterized queries
การประมวลผลทั้งหมดเกิดขึ้นในเบราว์เซอร์ของคุณ ไม่มีการอัปโหลดข้อมูล
ตัวทดสอบ SQL Injection
เครื่องมือเพื่อการศึกษาเพื่อทำความเข้าใจการโจมตี SQL injection และเรียนรู้วิธีป้องกันด้วย parameterized queries
🔒การประมวลผลทั้งหมดเกิดขึ้นในเบราว์เซอร์ของคุณ ไม่มีการอัปโหลดข้อมูล
เทมเพลต Query
SELECT (Login)
ข้อมูลเข้าของผู้ใช้ (จำลอง)
SQL Injection Payload ที่พบบ่อย
Query ที่มีช่องโหว่ (String Concatenation)
ไม่ปลอดภัย - ห้ามใช้ใน production
SELECT * FROM users WHERE username = 'user_input_here' AND password = 'pass123'
ทางเลือก Parameterized ที่ปลอดภัย
Node.js (mysql2)
const [rows] = await connection.execute( 'SELECT * FROM users WHERE username = ? AND password = ?', [username, password] );
Python (psycopg2)
cursor.execute(
"SELECT * FROM users WHERE username = %s AND password = %s",
(username, password)
)Java (PreparedStatement)
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM users WHERE username = ? AND password = ?"
);
ps.setString(1, username);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();C# (SqlParameter)
using var cmd = new SqlCommand(
"SELECT * FROM users WHERE username = @user AND password = @pass",
connection
);
cmd.Parameters.AddWithValue("@user", username);
cmd.Parameters.AddWithValue("@pass", password);PHP (PDO)
$stmt = $pdo->prepare(
'SELECT * FROM users WHERE username = :user AND password = :pass'
);
$stmt->execute(['user' => $username, 'pass' => $password]);แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน SQL Injection
1
ใช้ parameterized queries (prepared statements) เสมอแทนการต่อสตริงสำหรับ SQL2
ใช้ ORM (Sequelize, SQLAlchemy, Entity Framework) ที่สร้าง parameterized queries อัตโนมัติ3
ใช้หลักสิทธิ์น้อยที่สุด: บัญชีฐานข้อมูลควรมีเฉพาะสิทธิ์ที่จำเป็น4
ใช้ allowlist สำหรับ identifier แบบไดนามิกเช่นชื่อคอลัมน์และชื่อตารางที่ไม่สามารถ parameterize ได้5
ใช้การตรวจสอบข้อมูลเข้าเป็นมาตรการป้องกันเชิงลึก แต่ห้ามพึ่งพาเป็นการป้องกันเดียว6
เปิดใช้งานกฎ WAF (Web Application Firewall) และตรวจสอบบันทึกสำหรับรูปแบบการโจมตี SQL injection