SQL预处理语句不工作



我正在努力解决这个问题,但由于某种原因我无法解决它。

Connection conn = null;
PreparedStatement ps = null;                                        
String query = "INSERT INTO " + "tags" + "(Name, Income, Expense) VALUES(?,?,?)";
ps = conn.prepareStatement(query);
ps.setString(1, tag);
ps.setString(2, amount_);
ps.setString(3, "0");
ps.executeQuery();

Tag是用户输入的字符串,用户仍然可以发送SQL注入!为什么? ?我也得到这个Eclipse错误:Null pointer access: The variable conn can only be null at this location .

您的数据库连接尚未初始化。在创建准备好的语句之前,您需要使用DriverManager类来获取数据库连接。

如果"tags"是由用户提供的,那么您的SQL仍然可能容易受到注入攻击,因为用户可以指定额外的SQL操作而不是表名。例如,如果用户输入:

"users (Name, Income, Expense) VALUES('','',''); drop table accounts; INSERT INTO users ;"

作为"tags"的值,用户可以在users表中插入额外的一行,并删除accounts表。您需要使"tags"成为准备好的语句的一部分,将"tags"替换为"?"并使用setString来赋值。

最新更新