首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将完整的结果集转换为SQL中的字符串(HSQLDB)

将完整的结果集转换为SQL中的字符串(HSQLDB)
EN

Stack Overflow用户
提问于 2016-03-26 16:43:54
回答 1查看 182关注 0票数 2

作为安全代码课程的一部分,我将获得一个易受攻击的Java系统,在该系统中,查询是使用字符串连接构建的,等等。下面是用于检索登录数据的SQL注入的相应代码行:

代码语言:javascript
运行
复制
String comment;
int articleID;
//...
stmt.executeUpdate("INSERT INTO comment (text, article_id) VALUES ('" + comment + "', " + articleId + ")");

comment可以设置为任何文本,它只是从文本框中读取纯文本.因此,我考虑将textbox文本设置为SELECT语句,读取完整的登录数据(表userloginpassword列):

代码语言:javascript
运行
复制
' || (SELECT login || password FROM user) || '

在总体上,这应该会导致查询。

代码语言:javascript
运行
复制
INSERT INTO comment (text, article_id) VALUES ('' || (SELECT login || password FROM user) || '', 4)

然而,这却导致了

org.hsqldb.HsqlException:基数违反

问题:

我认为这是因为(SELECT login || password FROM user)不是单个字符串,而是结果集,因此可能不会使用||连接。

是否可以将完整的结果集转换为一个字符串,以便在此SQL注入场景中使用(在用于HSQLDB的标准SQL / SQL中)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-26 19:41:40

您是正确的,因为显然有多个用户,并且从SELECT返回多个行。

可以将LIMIT 1添加到SELECT以获得第一行。还可以从内部选择创建字符串数组。看导游。

在HSQLDB中,每个数据库用户都有对表的单独访问权限。在实际部署中,插入注释的用户甚至看不到包含密码的表的存在,更不用说从中进行选择了。

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

https://stackoverflow.com/questions/36237970

复制
相关文章

相似问题

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