MySQL表名JAVA中的注入

问题描述 投票:0回答:1

我有必要在运行时在数据库中生成表。 在这种情况下我不能使用preparedStatement。

我试图找到一个库来验证MySQL的查询或tableName输入,但只找到了ESAPI,它只能转义我的String。我有我的自定义验证器,但我知道在这种情况下我无法确定。

我读了很多关于如何滥用SQL注入的例子。但通常资源提供参数示例,而不是表名。据我了解,如果参数在查询结束时有可能。

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

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

要么

"DROP TABLE " + tableName

tableName - 来自客户端的输入

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

问题2:通常他们在需要使用某些角色时使用该策略,或者类似的东西,并在他们写下他们的请求之后。对于这种策略,需要使用空间。

是否可以在无法包含空格的输入中粘贴SQL注入?只有信件?下划线可以作为中断查询的字符吗?

更新:

如果在“firstname_lastname”下面的下划线之前添加escape-char是安全的吗?

java mysql sql sql-injection
1个回答
1
投票

我建议不要这样做,但如果必须这样做,Michael Butscher的评论非常好。根据数据库实现,你可以使用像制表符或%00 %09 /**/ %0d %0a这样的东西来绕过空间。

© www.soinside.com 2019 - 2024. All rights reserved.