我正在努力解决这个问题,我出于某种原因无法解决这个问题。
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
。
答案 0 :(得分:0)
您的数据库连接尚未初始化。在创建预准备语句之前,您需要DriverManager类来获取数据库连接。
如果用户提供“标签”,您的SQL仍然可能容易受到注入攻击,因为用户可以指定其他SQL操作而不是表名。例如,如果用户输入:
"users (Name, Income, Expense) VALUES('','',''); drop table accounts; INSERT INTO users ;"
作为“tags”的值,用户可以在users表中插入一个额外的行并删除accounts表。您需要将“标签”作为预准备语句的一部分,将“标签”替换为“?”并使用setString分配值。