1

私にとっては興味深いバグがあります。

私が実行したクエリに従ってください。

すべてが正常です。

mysql> select hex(current_user());
Result : 726F6F74406C6F63616C686F7374

すべてが正常です。

mysql> select substring(hex(current_user()),1,15);
Result : 726F6F74406C6F6

substringメソッドの2番目と3番目のパラメーターにnull文字列を追加しました。すべてが正常です。

mysql> select substring(hex(current_user()),''+1,''+15);
Result : 726F6F74406C6F6

サブ文字列のfirsパラメータにnull文字列を追加すると、726。:Sのみが返されます。最新のクエリと同じ結果を期待していました。

mysql> select substring(hex(current_user())+'',1,15);
Result : 726

mysql> select substring(hex(current_user())+'',2,15);
Result : 26

mysql> select substring(hex(current_user())+'',3,15);
Result : 6

mysql> select substring(hex(current_user())+'',4,15);
Result : NULL

私はMysql5.0.95と5.1.61と同じ問題でテストしました..!サブストリングの代わりにmid関数を使用して同じクエリをテストしました。もう一度同じです。

何か案が ?ある種のWebアプリケーションファイアウォールルールバイパスに取り組んでいて、そのバグに気づきました。

4

2 に答える 2

1

「+」演算子を適用すると、HEXから整数に変換されます(HEXから最初の非数字文字までの文字:726)。また、空の文字列も (整数: 0 に) 変換されます。

例:

''+1 => 0+1=1
726F6F74406C6F63616C686F7374+'' => 726+0 = 726

文字列の連結にはconcat()関数を使用する必要があります。

于 2012-11-29T22:07:32.513 に答える
0

信頼できる結果が必要な場合は、concatを使用する必要があります...

SELECT hex(current_user()),
    hex(current_user())+'', 
    substring(hex(current_user())+'',1,15),
    concat(hex(current_user()), ''), 
    substring(concat(hex(current_user()), ''),1,15); 
于 2012-11-29T21:50:14.743 に答える