2

という名前のテーブル名をエスケープするにはどうすればよいlog\'; WAITFOR DELAY \'0:0:5\';--ですか?

テーブルを削除したい。

これらの作品のどれも:

SHOW TABLES LIKE 'log\\\'; WAITFOR DELAY \\\'0:0:5\\\';--';
SHOW TABLES LIKE "log\\'; WAITFOR DELAY \\'0:0:5\\';--";
SHOW TABLES LIKE `log\\'; WAITFOR DELAY \\'0:0:5\\';--`;

最後のものはエラーを返しますが、他のものは結果を返しません。エラーは次のとおりです。

ERROR 1064 (42000): 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 '`log\\'; WAITFOR DELAY \\'0:0:5\\';--`' at line 1
4

3 に答える 3

2

これらのステートメントは、テーブル名を返します (テーブルが存在する場合)。

SHOW TABLES LIKE "log\\\\'%"

SHOW TABLES LIKE "log\\\\'; WAITFOR DELAY \\\\'0:0:5\\\\';--"

SELECT table_name FROM information_schema.tables 
 WHERE table_name LIKE "log\\\\'; WAITFOR DELAY \\\\'0:0:5\\\\';--"

SQL ステートメントでテーブル名を参照するには、バッククォートを使用して名前を囲む必要があります。次に例を示します。

SELECT 1 FROM `log\'; WAITFOR DELAY \'0:0:5\';--` LIMIT 1 ;

RENAME TABLE `log\'; WAITFOR DELAY \'0:0:5\';--` TO `foo` ;

DROP TABLE `log\'; WAITFOR DELAY \'0:0:5\';--` ;

注: SQL ステートメントでオブジェクト名を参照する場合、名前に含まれるバックスラッシュと特殊文字をエスケープする必要はありません。バッククォートで囲むだけです。ただし、これらのバックスラッシュは、LIKE 述語にあるように、文字列リテラルとして解釈される場合はエスケープする必要があります。

(私はそこにいて、それを行って、不安定なテーブル名を作成しました。)


名前が で始まるすべてのテーブルを削除するlog\'には、2 段階のプロセスで行います。まず、DROP TABLE ステートメントを生成し、次にそれらのステートメントを実行します。

SELECT CONCAT('DROP TABLE `',table_name,'`;') 
 FROM information_schema.tables
WHERE table_name LIKE "log\\\\'%"
  AND table_schema = DATABASE()
于 2012-07-05T16:22:39.227 に答える
0
`log\'; WAITFOR DELAY \'0:0:5\';--`

それを試してみてください。

編集

から編集

`log\\'; WAITFOR DELAY \\'0:0:5\\';--`

`log\'; WAITFOR DELAY \'0:0:5\';--`
于 2012-07-05T16:14:31.773 に答える
0

テーブル名に実際に \ 文字が含まれていますlog'; WAITFOR DELAY '0:0:5';--か? http://dev.mysql.com/doc/refman/5.0/en/identifiers.htmlによると、\ 文字はテーブル名に使用できないためです。

これは機能しますか:

SHOW TABLES LIKE `log'; WAITFOR DELAY '0:0:5';--`;
于 2012-07-05T16:24:07.620 に答える