[英]Java SQL Injection - MySQLSyntaxErrorException
我试图通过SQL注入我的一个应用程序来编写项目所需的写操作。
我使用了以下语句:
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);
然后,当我将以下内容放入表单输入之一(在本例中为活动名称输入)时:
ActivityName'); 拖放表学生; -
我收到以下错误:
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中Statement的工作方式以及查询的其余部分被解析而导致发生错误。
谢谢
编辑:我知道我应该使用准备好的语句。 我的应用程序在JPA中使用ORM。 对于大学,我只是测试SQL注入的工作方式。
默认情况下,MySQL JDBC驱动程序不允许一个执行程序运行多个SQL语句。 这意味着您显示的SQL注入测试类型无法执行。 这是一件好事!
在连接到JDBC数据源时,必须通过在JDBC URL中放置allowMultiQueries=true
来显式地允许多查询。
还有其他类型的SQL注入不运行其他语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.