0

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

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.

4

1 回答 1

0

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

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

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

作为“标签”的值,用户可以在用户表中插入一个额外的行并删除帐户表。您需要将“标签”作为准备好的语句的一部分,将“标签”替换为“?” 并使用 setString 来分配值。

于 2013-06-02T20:44:28.690 回答