首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sql预准备语句不工作

sql预准备语句不工作
EN

Stack Overflow用户
提问于 2013-06-03 02:46:04
回答 1查看 323关注 0票数 0

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

代码语言:javascript
运行
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-03 04:44:29

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

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

代码语言:javascript
运行
复制
"users (Name, Income, Expense) VALUES('','',''); drop table accounts; INSERT INTO users ;"

作为“标签”的值,用户可以在users表中插入额外的一行并删除accounts表。您需要在准备好的语句中加入“标记”,将“标记”替换为"?“并使用setString赋值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16886082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档