管理员编辑资料页密码字段显示哈希值,如何改为显示未哈希密码
如何在管理员资料编辑页面显示未哈希的密码?
问题描述
我正在开发系统的管理员资料编辑页面,处理密码部分时发现密码字段显示的是哈希值。相关代码如下:
$the_user_id = $_SESSION['username']; $query = "SELECT firstname,lastname,username,email,password,user_avatar FROM users WHERE username = '{$the_user_id}' "; $select_users_query= mysqli_query($connection,$query); while($row = mysqli_fetch_assoc($select_users_query)) { $username= $row['username']; $password= $row['password']; $firstname= $row['firstname']; // 其他字段赋值... }
请问怎么实现让编辑密码字段显示未哈希的原密码?
回答
兄弟,先给你敲个重点:哈希密码是单向加密的,完全没法逆向还原成明文——这本来就是为了保护用户密码安全的核心设计,所以你从数据库里读出来的哈希值,根本转不成原密码。
那该怎么处理编辑页面的密码字段呢?给你两个思路,优先选第一个:
推荐方案:隐藏原密码,只提供修改入口
这是行业通用的安全做法,编辑页面的密码输入框默认留空,提示用户「如果不需要修改密码,请保持为空」。当用户提交表单时,只对非空的密码输入进行重新哈希,再更新数据库。举个代码示例:
前端表单部分:<div class="form-group"> <label for="new_password">修改密码</label> <input type="password" class="form-control" name="new_password" placeholder="不修改请留空"> </div>后端处理逻辑:
// 假设表单提交后获取数据 if(isset($_POST['submit_edit'])) { $the_user_id = $_SESSION['username']; // 处理其他字段更新... // 只处理非空的密码输入 if(!empty($_POST['new_password'])) { // 重新生成安全的哈希密码 $hashed_password = password_hash($_POST['new_password'], PASSWORD_DEFAULT); $update_password_query = "UPDATE users SET password = '{$hashed_password}' WHERE username = '{$the_user_id}'"; mysqli_query($connection, $update_password_query); } }绝对不推荐的错误做法:存储明文密码
有些开发者可能会想「那我数据库里同时存明文和哈希不就行了?」——千万别这么干!一旦数据库被泄露,用户的明文密码会直接暴露,不仅违反数据安全法规(比如GDPR),还会给用户带来极大的账号安全风险,完全不符合安全规范。
总结一下:别想着还原哈希密码了,用「留空不修改,输入则更新」的方案才是正确且安全的做法。
内容的提问来源于stack exchange,提问作者Alan Moe
相关产品推荐
相关产品推荐

