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
之类的东西来绕过空格,具体取决于数据库实现。
我需要在运行时在数据库中生成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
之类的东西来绕过空格,具体取决于数据库实现。