SQL 注入測試器
了解 SQL 注入攻擊並學習如何使用參數化查詢防範的教學工具
所有處理皆在瀏覽器中完成,不會上傳任何資料。
SQL 注入測試器
了解 SQL 注入攻擊並學習如何使用參數化查詢防範的教學工具
🔒所有處理皆在瀏覽器中完成,不會上傳任何資料。
查詢範本
SELECT (Login)
使用者輸入(模擬)
常見 SQL 注入攻擊範例
有漏洞的查詢(字串串接)
不安全 - 請勿在正式環境中使用
SELECT * FROM users WHERE username = 'user_input_here' AND password = 'pass123'
安全的參數化替代方案
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 注入預防最佳實踐
1
始終使用參數化查詢(預備語句)而非字串串接來建立 SQL。2
使用 ORM(Sequelize、SQLAlchemy、Entity Framework)自動產生參數化查詢。3
應用最小權限原則:資料庫帳號應僅具有所需的權限。4
對無法參數化的動態識別碼(如欄位名稱和資料表名稱)使用白名單。5
將輸入驗證作為縱深防禦措施,但切勿將其作為唯一保護。6
啟用 WAF(Web 應用程式防火牆)規則,並監控日誌中的 SQL 注入嘗試模式。