sql - Why does SELECT 'a'='b'='c' return 1 in MYSQL? -
i doing homework security class involving sql injections. found shorter sql injection typical ' or '1'=1 example. instead '='. typing in password field of typical login boxes gives sql query this:
select * users username='user' , password=''=''; it turns out password=''='' evaluates 1, allowing sql injection work.
after doing more testing, saw if test if string equal 0, returns 1:
select 0='a'; so in example, password='' evaluate 0 , 0='' end evaluating 1.
my testing showed me how happening, want know why happens (i.e why 0='a' true?.
as documented under type conversion in expression evaluation, comparisons between string , integer performed numerically:
- in other cases, arguments compared floating-point (real) numbers.
therefore, operands converted floating-point numbers , compared.
conversion of string float consider every numeric character (and first period or exponentiation character) encountered first non-numeric character. therefore 'hello' or 'a' truncated '' (and thereby cast zero) whereas '123.45e6foo789' truncate '123.45e6' (and thereby cast 123,450,000).
thus 1 can see how 0='a' true: compared 0=0.
that password=''='' true (provided that password non-empty string, or non-zero numeric) comes because first comparison results in 0 (false), forces second comparison performed numerically (thus converting '' 0 comparison 0 result of first comparison).
Comments
Post a Comment