You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中使用PreparedStatement但直接拼接用户输入是否属于SQL注入?

直接拼接用户输入到SQL语句再用PreparedStatement执行,是否属于SQL注入?

这绝对属于SQL注入风险场景,完全可以认定为SQL注入。

PreparedStatement能防注入的核心是它的参数化查询机制:通过setString()、setInt()这类方法传递用户输入时,JDBC驱动会自动对参数做转义处理,数据库也会把SQL的结构逻辑和参数内容分开解析,从根源上避免用户输入篡改原SQL的执行逻辑。

但如果跳过setXxx()方法,直接把用户输入拼进SQL字符串,再传给PreparedStatement执行,这和用普通Statement执行拼接后的SQL没有任何区别。举个实际的例子:

假设用户输入恶意内容' OR 1=1 --,拼接后的代码是这样的:

String maliciousInput = "' OR 1=1 --";
String sql = "SELECT * FROM users WHERE username = '" + maliciousInput + "'";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();

此时生成的SQL语句已经变成SELECT * FROM users WHERE username = '' OR 1=1 --',恶意输入直接篡改了查询条件,会返回所有用户数据——这就是典型的SQL注入攻击成功的场景。

说白了,PreparedStatement只是个执行SQL的工具,它防注入的前提是你用对了它的参数化方式。如果还是用字符串拼接构造SQL,不管用什么执行工具,都逃不开SQL注入的风险。

内容的提问来源于stack exchange,提问作者Uday Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:34:51