gpt4 book ai didi

Java SQL 注入(inject) - MySQLSyntaxErrorException

转载 作者:行者123 更新时间:2023-11-29 05:55:40 24 4
gpt4 key购买 nike

我正在尝试通过 SQL 注入(inject)我的一个应用程序,以编写我需要为项目做的文章。

我使用了以下语句:

Statement statement = conn.createStatement();
String insertTableSQL = "INSERT INTO activity (activity_name, user_id, category_id, started, completed) VALUES ('" + activityForm.getName() + "', '" + user.getId() + "', '" + category.getId() + "', '" + 0 + "', '" + 0 + "')";
System.out.println(insertTableSQL);
statement.executeUpdate(insertTableSQL);

然后当我将以下内容放入我的表单输入之一(在本例中为 Activity 名称输入)时:

ActivityName'); DROP TABLE STUDENTS; --

我收到以下错误:

INSERT INTO activity (activity_name, patient_id, category_id, started, completed) VALUES ('ActivityName'); DROP TABLE STUDENTS; --', '1', '1', '0', '0')
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DROP TABLE STUDENTS; --', '1', '1', '0', '0')' at line 1

我似乎找不到避免此错误的方法,所以我希望有人有一些想法。

我猜测错误的发生是由于 Java 中语句的工作方式以及正在解析的查询的其余部分。

谢谢

编辑:我知道我应该使用准备好的语句,我知道。我的应用程序将 ORM 与 JPA 结合使用。对于大学,我只是测试 SQL 注入(inject)的工作原理。

最佳答案

默认情况下,MySQL JDBC 驱动不允许一次执行运行多个SQL 语句。这意味着您显示的 SQL 注入(inject)测试类型无法执行。这是好事!

当您连接到 JDBC 数据源时,您必须通过在 JDBC URL 中放置 allowMultiQueries=true 来明确允许多重查询。

另见 Multiple queries executed in java in single statement

还有其他类型的 SQL 注入(inject)不运行额外的语句。

关于Java SQL 注入(inject) - MySQLSyntaxErrorException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49679218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com