J'ai téléchargé le code source de thinkphp5.3 depuis Internet pour apprendre. Comme il n'y a pas de fichier d'installation, il ne peut être installé que via l'importation de la base de données. Après avoir importé la base de données et configuré le fichier de connexion à la base de données, recherchez
admin:admin dans. la table d'administration dans phpmydmin.
password:12eefdf664f0e07e65a2c35e01e98d29
J'ai déchiffré le mot de passe et j'ai obtenu le mot de passe en texte clair : o8889t
Lorsque je me suis connecté à l'arrière-plan du code source, il n'arrêtait pas de me dire que le mot de passe ou le compte était erroné, puis J'ai changé le mot de passe dans la table d'administration en e10adc3949ba59abbe56e05 7f20f883e. Le texte en clair est : 123456
à nouveau. Lorsque je me connecte, je trouve toujours que le compte ou le mot de passe est erroné. Je veux savoir quelle méthode de cryptage le mot de passe utilise dans le backend. Ou comment puis-je me connecter avec succès en arrière-plan ? Trois fichiers sont répertoriés, merci de me donner quelques conseils, merci beaucoup.
Le code de connexion AdminController.class.php au backend est le suivant :
---------------------------------- --------------- ------------------------------------ ----------
< ?php
namespace AdminController;
utilisez ThinkController;
class IndexController étend Controller
{
index de fonction publique()
{
layout(false);
this $ ->display();
}
//Connexion
public function loginin()
{
layout(false);
if(I( 'post.adminuser') et I('post.adminpwd'))
{
$adminuser=I('post.adminuser');
$adminpwd=I('post.adminpwd');
//Mémoriser le compte
$remember=I('post.remember' );
if(!empty($remember))
{
cookie('remember',$remember,3600*24*30) ;
cookie('loginname',$adminuser,3600*24*30 );
cookie('loginpwd',$adminpwd,3600*24*30);
}else {
cookie('remember', null);
cookie('loginname',null);
cookie ('loginpwd',null);
}
$auth=I('post.auth');
$verify = new ThinkVerify();
$res=$verify->check($ auth, '');
if($res==false)
{
$this->assign('error',' Le code de vérification est incorrect! ');
$this->display('index');
exit();
}
$admin=new AdminModelAdminModel();
$res=$admin->where("adminname ='$adminuser'")->find();
if($res)
{
$status=$res['status'];
if($status==0)
{
$this->assign('error','Cet administrateur a été désactivé !');
$this->display('index');
exit();
}else {
$ password=$res['password'];
//Cryptage MD5
$pwd=$admin->encrypt($adminpwd);
if($password!=$pwd)
{
$ this ->assign('error','Username or password is incorrect!');
$this->display('index');
exit();
}else {
//Juge si le groupe administrateur est désactivé
$group_id=$res['group_id'];
$AdminGroup=new AdminModelAdminGroupModel();
$res_g=$AdminGroup->where("id=$group_id")-> ; field('status')->find();
if($res_g['status']=='1')
{
//Mettre à jour le statut de connexion
$ip=getIP(
);$login_num=$res['login_num']+1;
$data=array(
'last_login_time'=>date('Y-m-d H:i:s'),
'last_login_ip'=> $ ip,
'login_num'=> ($res2)
{
//Enregistrer la SESSION de l'utilisateur
$_SESSION['admin_id']=$res['uid'];
$_SESSION['a_group_id'] =$res['group_id'];
//Retour à la page
$this->redirect('System/index');
}else {
$this->assign('error',' La connexion a échoué! ');
$this->display('index');
}
}else {
$this->assign('error','Le groupe d'administrateurs dans lequel vous vous trouvez a été désactivé !' ;
' L'administrateur n'existe pas ! ');
$this->display('index');
}
}else {
$this->assign('error','Account le numéro et le mot de passe ne peuvent pas être vides ! ');
$this->display('index');
}
}
//Déconnexion
connexion de fonction publique()
{
$_SESSION['admin_id ']=null;
S $ _Session ['a_group_id'] = null; // sauter la page $ this- & gt; redirect ('Index/Index'); = array( 'expire' => 1800, // Délai(s) d'expiration du code de vérification 'useImgBg' => false, // Utiliser l'image d'arrière-plan // Taille de la police du code de vérification (px) > false, // S'il faut ajouter du bruit gt; 4, // Code de vérification Nombre de chiffres 'fontttf' => paramètre 'bg' => array(243, 251, 254), //Couleur d'arrière-plan ) ; $verify=new ThinkVerify($config); /** * Affichez le code de vérification et enregistrez la valeur du code de vérification dans la session * Le format du code de vérification enregistré dans la session est : array('verify_code' => 'Verification code value', 'verify_time' => ; 'Heure de création du code de vérification'); **/ $verify->entry(); } } -------- ------------------------- ------------------------- ------------------------- ------------------------- ------------------------- ------------------------- --- Le code du deuxième fichier AdminController.class.php est le suivant : ----- ----------------------------- --------------------- ----------------------------- - /** *Gestion des administrateurs */ espace de noms AdminController ; use AdminCommonControllerAuthController; class AdminController extends AuthController { public function index() { if( I('get.search')) { $search=I(' get.search');$where="adminname='$search' ou email='$search' ou phone='$search'";
}
if(I('get.group_id'))
{
$group_id =I('get.group_id');
$where="group_id='$group_id'";
}
if(I('get.group_name'))
{
$group_name=I( 'get.group_name');
$res_ag=D('AdminGroup')->where("title='$group_name'")->field('id')->find();
$group_id=$res_ag['id'];
$where="group_id='$group_id'";
}
if(I('get.search')=='' et I('get. group_id')=='' et I('get.group_name')=='')
{
$where='1';
}
$Admin=new AdminModelAdminModel();
$count =$Admin->where($where)->count();
$per = 15;
if($_GET['p'])
{
$p=$_GET['p '];
}else {
$p=1;
}
$Page= new ThinkPage($count,$per);//显示的记录数(25)
$Page->rollPage=10; // 分页栏每页显示的页数
$Page -> setConfig('header','共%TOTAL_ROW%条');
$Page -> setConfig('first','首页');
$Page -> setConfig('last','共%TOTAL_PAGE%页');
$Page -> setConfig('prev','上一页');
$Page -> setConfig('next','下一页');
$Page -> setConfig('link','indexpagenumb');//pagenumb 会替换成页码
$Page -> setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% 第 '.I('p',1).' par rapport à %TOTAL_PAGE% ('.$per.' 条/页 共 %TOTAL_ROW% 条)');
$show= $Page->show();// 分页显示输出
$ adminlist = $Admin->where($where)->page($p.','.$per)->select();
$this->assign('alist',$adminlist) ;// 赋值数据集
$this->assign('page',$show);
$this->display();
}
//新增管理员
public function add()
{
//Obtenir la liste des groupes d'administrateurs
$group=new AdminModelAdminGroupModel();
$grouplist=$group->getGroupList2();
$this->assign('glist',$grouplist);
if(I('post.'))
{
if(I('post.adminname'))
{
$adminname=I('post.adminname');
$Admin=new AdminModelAdminModel();
$res=$Admin->where("adminname='$adminname'")->find();
if($res)
{
$str='Xle nom d'utilisateur existe déjà';
echo $str;
exit();
}else {
$str='';
$a='a';
}
}
if( I('post.password') et I('post.password2'))
{
$password=I('post.password');
$password2=I('post.password2') ;
if (strlen($password2)<=5)
{
$str='Le mot de passe X ne contient pas moins de 6 caractères';
echo $str;
exit();
}else {
if($password!=$password2)
{
$str='XLes mots de passe sont différents deux fois';
echo $str;
exit();
}else {
$str= '' ;
$a.='a';
}
}
}
if(I('post.email'))
{
$email=I ('post.email') );
if(is_email($email))
{
$str='';
}else {
$str='Le format de l'e-mail X est incorrect';
echo $str;
exit ();
}
}
if(I('post.phone'))
{
$phone=I('post.phone');
if(is_phone( $ phone) )
{
$str='';
}else {
$str='Le format du numéro de mobile X est incorrect';
echo $str;
exit();
}
// Cryptage MD5
$pwd=$Admin->encrypt($password2);
$email=I('post.email');
$phone=I('post.phone');
$group_id=I('post.group_id');
$status=I('post.status');
$register_time=date('Y-m-d H:i:s');
//php获取ip的算法
$ip = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$ip = ($ip) ? $ip : $_SERVER["REMOTE_ADDR"];
$data=array(
'adminname'=>$adminname,
'password'=>$pwd,
'email'=>$email ,
'phone'=>$phone,
'province'=>trim(I('post.province')),
'city'=>trim(I('post.city') ),
'group_id'=>$group_id,
'status'=>$status,
'register_time'=>$register_time,
'register_ip'=>$ip,
'last _login_time '=>date('Y-m-d H:i:s')
);
$res=$Admin->add($data);
if($res)
{
echo '1 ';
}else {
echo '0';
}
}
}else {
$this->display();
}
}
//编辑管理员
public function edit($uid)
{
//获取管理员信息
$Admin=new AdminModelAdminModel();
$aMsg=$Admin->getAdminMsg($uid );
$ this->assign('msg',$aMsg);
//获取管理员组列表
$group=D('admin_group');
$grouplist=$group->getGroupList2();
$this->assign('glist',$grouplist);
if(IS_POST)
{
//var_dump(I('post.'));exit;
if(I( 'post.adminname'))
{
$adminname=I('post.adminname');
$res=$Admin->where("adminname='$adminname' et uid!='$uid '")->find();
if($res)
{
$error='X该用户名已存在';
$this->assign('error',$error) ;
$this->display();
exit();
}
}
$email=I('post.email');
if($email)
{
if(is_email($email)!==true)
{
$error1='X邮箱格式不正确';
$this->assign('error1',$error 1);
$this->display();
exit();
}
}
$phone=I('post.phone');
if($phone)
{
if(is_phone($phone)!==true)
{
$error2='X手机号码格式不正确';
$this->assign('error2',$error2);
$this ->display();
exit();
}
}
$group_id=I('post.group_id');
$login_num=I('post.login_num');
$ status=I('post.status');
$data=array(
'adminname'=>$adminname,
'email'=>$email,
'phone'=> $phone,
'province'=>trim(I('post.province')),
'city'=>trim(I('post.city')),
'group_id'=> ;$group_id,
'login_num'=>$login_num,
'status'=>$status,
);
if(I('post.password'))
{
$password =I('post.password');
//MD5加密
$pwd=$Admin->encrypt($password);
$data['password']=$pwd;
}
$res=$Admin->where("uid=$uid")->save($data);
if($res!==false)
{
layout(false);
$ this->success('编辑管理员成功!',U('index'),3);
}else {
layout(false);
$this->error('操作失败!' );
}
}else {
$this->display();
}
}
//修改管理员禁用状态
changement de statut de la fonction publique($id,$status)
{
$data=array(
'status'=>$status
);
$Admin=new AdminModelAdminModel();
$res=$Admin->where("uid=$ id")->save($data);
if($res===false)
{
echo '0';
}else {
echo '1';
}
}
//Supprimer l'administrateur
fonction publique del($id)
{
$Admin=new AdminModelAdminModel();
$res=$Admin->where("uid=$id")- > ;delete();
if($res===false)
{
echo '0';
}else {
echo '1';
}
}
/ / Changer le mot de passe
Fonction publique changepwd()
{
if($_SESSION['admin_id']!='')
{
$admin_id=$_SESSION['admin_id'];
if(I ( 'post.'))
{
$oldpwd=I('post.oldpwd');
if($oldpwd=='')
{
$this->assign('error1' , 'Le mot de passe d'origine ne peut pas être vide ! ');
$this->display();
exit();
}
$pwd1=I('post.pwd1');
$pwd2= I('post.pwd2');
if($pwd1=='')
{
$this->assign('error2','Le nouveau mot de passe ne peut pas être vide !');
$ this ->display();
exit();
}
if($pwd2=='')
{
$this->assign('error3','Le mot de passe répété ne peut pas être vide ! ');
$this->display();
exit();
}
if($pwd1==$pwd2)
{
if(strlen($pwd2)>5 )
{
//Vérifiez si le mot de passe d'origine est correct
$Admin=new AdminModelAdminModel();
$res=$Admin->checkPwd($admin_id,$oldpwd);
if($res )
{
//Changer le mot de passe
$newpwd=$Admin->encrypt($pwd2);
$data=array(
'password'=>$newpwd
);
$ res2=$ Admin->where("uid=$admin_id")->save($data);
layout(false);
if($res2===false)
{
$this -> erreur('Échec de la modification du mot de passe ! ');
}else {
$this->success('Mot de passe modifié avec succès !');
}
}else {
$this->assign('error1','Le mot de passe d'origine c'est faux ! ');
$this->display();
exit();
}
}else {
$this->assign('error3','Le nouveau mot de passe ne doit pas comporter moins de 5 caractères !');
$this->display();
exit();
}
}else {
$this->assign('error3','Les deux mots de passe sont différents !');
$this->display();
exit();
}
} else {
$this->display();
}
}else {
$this->redirect('Index/index');
}
}
}
-- ---- ----------------------------------------------- ---- ----------------------------------------------- ---- ----------------------------------------------- ---- ------
Le troisième fichier est le suivant :
namespace AdminCommonController;
utilisez ThinkController;
utilisez ThinkAuth;
//Authentification des autorisations
class AuthController extends Controller {
protected function _initialize(){
//Lorsque la session n'existe pas, l'accès direct n'est pas autorisé
if(!$_SESSION['admin_id'])
{
layout(false) ;
$this-> ;error('Pas encore connecté, accéder à la page de connexion',U('Index/index'));
}
//Lorsqu'une session existe, aucune autorisation de vérification n'est requise
$not_check = array (
'Admin/changepwd','System/index','System/index_show','System/cleancache','System/clearrubbish',//Changer le mot de passe, page d'accueil du système,
'ArticleCat/deloldimg',' Article/deloldimg','Article/deloldbigimg','Article/deloldfile',//Supprimer l'image originale de la catégorie d'article, supprimer l'image originale de l'article, supprimer la grande image originale de la article, supprimez le fichier original de l'article
'GoodsCat/deloldimg',// Supprimez l'image originale de la catégorie de produit
);
//Demande d'opération en cours Nom du module/nom de la méthode
if (in_array(CONTROLLER_NAME.'/'.ACTION_NAME, $not_check))
{
return true;
}
$auth = new Auth();
if(!$auth->check( CONTROLLER_NAME.'/'.ACTION_NAME,$_SESSION['admin_id']) et $_SESSION['a_group_id' ]!='1')
{
layout(false);
echo 'Aucune autorisation !';die ();
$this->error('Pas d'autorisation');
}
}
}
Résolu, merci