Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SQL(HSQLDB)中将完整的结果集转换为字符串_Java_Sql_String_Hsqldb - Fatal编程技术网

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

Java 在SQL(HSQLDB)中将完整的结果集转换为字符串,java,sql,string,hsqldb,Java,Sql,String,Hsqldb,作为安全代码课程的一部分,我得到了一个易受攻击的Java系统,在该系统中,查询是使用字符串连接建立的,等等。以下是检索登录数据时必须SQL注入的相应代码行: String comment; int articleID; //... stmt.executeUpdate("INSERT INTO comment (text, article_id) VALUES ('" + comment + "', " + articleId + ")"); 注释可以设置为任何文本,它只是从文本框中读取纯文本

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

String comment;
int articleID;
//...
stmt.executeUpdate("INSERT INTO comment (text, article_id) VALUES ('" + comment + "', " + articleId + ")");
注释可以设置为任何文本,它只是从文本框中读取纯文本。因此,我考虑将textbox文本设置为SELECT语句,读取完整的登录数据表user has columns login and password:

总的来说,哪一个应该导致查询

INSERT INTO comment (text, article_id) VALUES ('' || (SELECT login || password FROM user) || '', 4)
然而,这导致了

org.hsqldb.hsqldb异常:基数冲突

问题:

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


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

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

您可以将限制1添加到SELECT以获取第一行。还可以从内部选择创建字符串数组。请参阅指南

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

INSERT INTO comment (text, article_id) VALUES ('' || (SELECT login || password FROM user) || '', 4)