5up3rh3iblog
在menzhi007的blog裡看到非常有意思的東西:
html">http://www.BkJia.com/database/201003/45293.html
在mysql手冊裡:
http://www.phpchina.com/manual/mysql/functions.html#comparison-operators
MySQL按照以下規則進行數值比較:
在默認狀態下,字符串比較不區分大小寫,並使用現有字符集(默認為cp1252 Latin1,同時對英語也適合)。
為了進行比較,可使用CAST()函數將某個值轉為另外一種類型。 使用CONVERT()將字符串值轉為不同的字符集。請參見12.8節,“Cast函數和操作符”。
以下例子說明了比較運算中將字符串轉為數字的過程:
mysql> SELECT 1 > 6x;
-> 0
mysql> SELECT 7 > 6x;
-> 1
mysql> SELECT 0 > x6;
-> 0
mysql> SELECT 0 = x6;
-> 1
這個如果不注意好確實可以導致安全問題的,比如menzhi007裡舉的那個列子,如果字符變量查詢沒有引號,但是用某些函數過濾了不可以直接注射,那麼可以直接提交0就可以繞過了...
最後感謝menzhi007及hi群的各大牛的討論,尤其是ryat牛的指點:)