Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 随机生成pw作为新用户的默认值,然后让他们稍后使用php更改密码_Javascript_Php_Html - Fatal编程技术网

Javascript 随机生成pw作为新用户的默认值,然后让他们稍后使用php更改密码

Javascript 随机生成pw作为新用户的默认值,然后让他们稍后使用php更改密码,javascript,php,html,Javascript,Php,Html,大家好,我是web开发新手,正在使用php处理我的个人项目。我成功地为新用户生成了9位数的默认pw。我想让管理员对新用户的默认9位pw具有可见性。但是,我不希望管理员对新更改的用户pw具有可见性。假设一个新用户将其密码表单123456789更改为jk1234。我想把密码保存为jk****。但我无法使用下面的代码,因为它也屏蔽了原始的9位密码 $masked = str_pad(substr($number, -4), strlen($number), '*', STR_PAD_LEFT

大家好,我是web开发新手,正在使用php处理我的个人项目。我成功地为新用户生成了9位数的默认pw。我想让管理员对新用户的默认9位pw具有可见性。但是,我不希望管理员对新更改的用户pw具有可见性。假设一个新用户将其密码表单123456789更改为jk1234。我想把密码保存为jk****。但我无法使用下面的代码,因为它也屏蔽了原始的9位密码

    $masked =  str_pad(substr($number, -4), strlen($number), '*', STR_PAD_LEFT);
我应该如何解决这个问题

谢谢

编辑!!!!下面的代码工作正常(检查电子邮件地址和pw是否正确)

但是,在我对密码进行如下哈希运算之后 并使用密码更改了我的代码。\u验证,它无法正常工作 (检查我的密码是否为“$2y$10$JMABASEINCXA3ZBXNOGUYW2AWF1THOMB7J7KJ8NW7KL5G64QWM”)

你能告诉我是什么问题吗

    if(isset($_POST['email']) && isset($_POST['password'])){
        $email=mysqli_real_escape_string($con,$_POST['email']);
        $password=mysqli_real_escape_string($con,$_POST['password']);
        $res=mysqli_query($con,"select * from employee where email='$email' and password='$password'");
        $count=mysqli_num_rows($res);
        if($count>0){
            $row=mysqli_fetch_assoc($res);
            $_SESSION['ROLE']=$row['role'];
            $_SESSION['USER_ID']=$row['id'];
            $_SESSION['USER_NAME']=$row['name'];
            $_SESSION['DEPARTMENT']=$row['department_id'];
                if(password_verify($_POST['password'],$password)){
                    session_regenerate_id();
                    header('location:index.php');
                    die();
                }
        }else{
        $msg="Please enter correct login details";
      }
    }

密码不应以纯文本形式存储,也不应处于任何可以随时解密的状态。这真是糟糕的做法。我还建议您的密码由单词、短语、特殊字符以及数字组成,以提高安全性

请考虑在项目中使用和作为绝对最小值。

密码只能由打算访问该帐户的用户知道。您应该允许您的用户选择自己的密码,并提供一种安全的方式,在用户失去访问权限时自行重置密码

由于密码不能解密,通常的过程是:

  • 用户输入他们的密码
  • 您加密并处理它们的输入,然后将加密的散列与存储的散列进行比较
  • “管理员”绝对不应该要求用户密码。您的项目可以允许“管理员”执行用户可以执行的大多数操作,而无需以他们的身份登录,因为他们将被视为具有“升级权限”

    我无法回答您最初的问题,因为这样做对您或SO社区不利。然而,我希望提供的建议将有助于引导您的项目朝着正确的方向发展

    链接:


  • 不要未保存密码,请使用
    password\u hash()
    password\u verify()
    散列并检查密码。这样你可以保护你的用户,如果有人可以访问数据库(甚至是管理员),他就不知道真正的密码。那么管理员如何访问默认的9位密码?我的计划是管理员只能创建新帐户,并让新用户知道id和默认pw。然后用户可以更改自己的密码。当管理员通过web表单创建用户时,他应该知道该用户的密码,对吗?你打算直接使用phpmyadmin创建一个用户吗?嗯,不要。那是个坏习惯。在任何时候,唯一应该知道用户密码的人就是用户自己。要么让用户在注册时指定密码,要么用一次性使用令牌将其直接踢入“忘记我的密码”流。因为pw是由以下代码随机生成的$number=mt_rand(100000009999999);我认为$number应该保存到phpmyadmin中,以便可以看到默认的PW。非常感谢您的回答!你的链接帮助我了解了整个画面!!
        if(isset($_POST['email']) && isset($_POST['password'])){
            $email=mysqli_real_escape_string($con,$_POST['email']);
            $password=mysqli_real_escape_string($con,$_POST['password']);
            $res=mysqli_query($con,"select * from employee where email='$email' and password='$password'");
            $count=mysqli_num_rows($res);
            if($count>0){
                $row=mysqli_fetch_assoc($res);
                $_SESSION['ROLE']=$row['role'];
                $_SESSION['USER_ID']=$row['id'];
                $_SESSION['USER_NAME']=$row['name'];
                $_SESSION['DEPARTMENT']=$row['department_id'];
                    if(password_verify($_POST['password'],$password)){
                        session_regenerate_id();
                        header('location:index.php');
                        die();
                    }
            }else{
            $msg="Please enter correct login details";
          }
        }