我有必要在运行时在数据库中生成表。 在这种情况下我不能使用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是安全的吗?
我建议不要这样做,但如果必须这样做,Michael Butscher的评论非常好。根据数据库实现,你可以使用像制表符或%00
%09
/**/
%0d
%0a
这样的东西来绕过空间。