①某后台程序员使用下面语句查询产品ID语句,请问有什么缺陷? String sq1=” select * from T_ _PUB where pub_ name =‘” +pubName+ ”
时间: 2023-11-22 11:54:24 浏览: 59
这段代码存在 SQL 注入漏洞。如果攻击者能够通过 pubName 参数注入恶意的 SQL 代码,就可以执行任意 SQL 语句,从而获取、修改或删除敏感数据。为避免 SQL 注入攻击,应该使用参数化查询,如下所示:
```
String sql = "SELECT * FROM T_PUB WHERE pub_name = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, pubName);
ResultSet rs = pstmt.executeQuery();
```
PreparedStatement 对象会预编译 SQL 语句,并使用占位符 ? 来代替参数,从而避免了 SQL 注入攻击。
阅读全文