比如某某网站,当用户登录时,后台的查询SQL语句是Select user_id,user_type,email From users Where user_id=’用户名’ And password=’密码
有些网站对单引号没有过滤,当输入用户名【admin】和万能密码【2’or’1】时,执行的SQL语句为【Select user_id,user_type,email
From users Where user_id=’admin’ And
password=’2’or’1’】。同时,由于SQL语句中逻辑运算符具有优先级,【=】优先于【and】,【and】优先于【or】,且适用传递性。因此,此SQL语句在后台解析时,分成两句【Select
user_id,user_type,email From users Where user_id=’admin’ And
password=’2’】和【’1’】,两句bool值进行逻辑or运算,恒为TRUE。SQL语句的查询结果为TRUE,就意味着认证成功,也可以登录到系统中。
网友评论