SQL 注入测试器

了解 SQL 注入攻击及如何使用参数化查询进行防护的教育工具

所有处理均在浏览器中完成,不会上传任何数据。
Offline Ready

SQL 注入测试器

了解 SQL 注入攻击及如何使用参数化查询进行防护的教育工具

🔒所有处理均在浏览器中完成,不会上传任何数据。
查询模板
SELECT (Login)
用户输入(模拟)
输入模拟的用户输入以查看它如何影响 SQL 查询...
常见 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 注入尝试模式。