在做会员登录模块时,如果密码未加密或没有对提交的信息进行过滤,那么就可能会有or漏洞。下边我们先说说or漏洞的原理:
当用户提交用户名及密码后,服务器程序并对数据库进行查询,如果有与之匹配的用户名及密码,那么登录就成功。这边查询的SQL语句为:sql = "select * from user where username='" & username & "' and password='" & password & "'"
如果用户提交的用户名和密码都为:'or''=',那么上边的SQL语句就成了:sql = "select * from user where username='" & 'or''=' & "' and password='" & 'or''=' & "'" 即:select * from user where username=''or''='' and password=''or''='',这样一来,查询的结果总为true,自然也就登录成功了。针对这个原理,我们有两种方法可以防止or漏洞:
1.字符过滤
就是对用户提交的内容进行过滤,如将单引号、等号、or等过滤掉,那么自然SQL就能查询出实际的结果了。
2.对密码进行加密
现在很多用户系统都使用了md5函数对密码进行了加密,那么password='(被加密的'or''=')'的结果肯定为false,也能防止了or漏洞。
后记:在实际运用过程中,我们一般都是将上边两种方法一起使用,从而阻止利用or漏洞进行登录。
评论(0)
暂无评论。