MySQL Table 名称注入 JAVA

MySQL Table name Injection in JAVA

我需要在运行时在数据库中生成tables
在这种情况下,我不能使用 preparedStatement

我试图找到一个 来验证 查询或 table [= 的名称输入61=] 但只找到 ESAPI 只能 escape 我的字符串。我有它的自定义验证器,但我知道在这种情况下我不能确定。

我阅读了很多如何滥用 SQL 注入的例子。但通常资源会给出参数示例,而不是 table 名称。据我了解,如果参数在查询末尾,则有可能。

问题 1:您能举例说明如何滥用这些查询吗?

"CREATE TABLE " + tableName + "(id int primary key)"

"DROP TABLE " + tableName

table姓名 - 来自客户的输入

它对测试我的验证器非常有用。当我尝试这样做时,我总是 SQL 语法错误。

问题 2:通常他们在需要使用某些字符如 ,' 或类似的东西时以及在他们写下他们的请求后使用该策略。对于此策略,需要使用空格。

是否可以在不能有空格的输入中粘贴 SQL 注入?只有字母? 下划线可以作为中断查询的字符吗?

更新:

如果在 "firstname_lastname" 中的下划线之前添加转义字符是安全的?

我建议不要这样做,但如果您不得不这样做,Michael Butscher 的评论非常好。您可以使用制表符或 %00 %09 /**/ %0d %0a 之类的东西来绕过空格,具体取决于数据库实现。