欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

SQL 注入防御深潜:预编译语句(Prepared Statements)与 AST 语义解析

发表于:|最后更新:|分类:应用安全|阅读:1974 次

参数化查询(Parameterized Queries) 能够根除 SQL 注入的本质,在于它将 SQL 指令的**语法编译(Compile)与数据传输(Execute)**彻底解耦,使得传入的恶意攻击载荷无法改变数据库执行引擎生成的抽象语法树(AST)。

一、Java PreparedStatement 正确实现

java
String query = "SELECT id, username, balance FROM accounts WHERE user_id = ? AND status = ?";
try (PreparedStatement pstmt = conn.prepareStatement(query)) {
    pstmt.setLong(1, userId);
    pstmt.setString(2, "ACTIVE");
    ResultSet rs = pstmt.executeQuery();
    // 数据库仅将参数作为常量字面量处理,语义不受影响
}