我正在努力解决这个问题,但由于某些原因,我无法解决它。
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();SQL是用户输入的字符串,用户仍然可以发送Tag注入!为什么??我还得到了这个Eclipse错误:Null pointer access: The variable conn can only be null at this location。
发布于 2013-06-03 04:44:29
您的数据库连接尚未初始化。在创建预准备语句之前,您需要使用DriverManager类来获得数据库连接。
如果用户提供了“标记”,那么您的SQL仍然可能容易受到注入攻击,因为用户可以指定额外的SQL操作,而不是表名。例如,如果用户输入:
"users (Name, Income, Expense) VALUES('','',''); drop table accounts; INSERT INTO users ;"作为“标签”的值,用户可以在users表中插入额外的一行并删除accounts表。您需要在准备好的语句中加入“标记”,将“标记”替换为"?“并使用setString赋值。
https://stackoverflow.com/questions/16886082
复制相似问题