我想进行密码检查,其中 javascript 变量是用户写入的密码。我想检查它是否正确,我通过将用户写入的内容与存储实际值的 php 变量进行比较来做到这一点。
这不是一个安全的解决方案。我该如何改变它。我希望 if 语句位于与之前相同的位置?
她是我的代码:
var password=$("#password").val();
if(password!='<?php echo "$password"; ?>'){
alert("No changes has been made due to wrong password.");
}
else{
$.ajax({
type: "POST",
url: "modify_profile.php",
data: {"firstname":firstname,"lastname":lastname},
success: function( data){
}
});
}
});
这里是modify_profile.php。
<?php
require("../db/connect.php");
$email='test@gmail.com';
$written_password=( $_POST['firstname']);
if( isset($_POST['firstname']))
{
$firstname=( $_POST['firstname']);
$query=mysqli_query($dbcon, "UPDATE user SET first_name='$firstname' WHERE email='$email'");
$result = mysqli_query($dbcon,$query);
}
if( isset($_POST['lastname'])) {
$lastname=( $_POST['lastname']);
$query=mysqli_query($dbcon, "UPDATE user SET last_name='$lastname' WHERE email='$email'");
$result = mysqli_query($dbcon,$query);
}
require("../db/close.php")
?>
最佳答案
您不可能拥有这种风格的 if 语句并且是安全的。安全性要求您不要存储密码。
为了安全,您必须:
- 仅将密码存储在 hashed form 中加盐
- 通过 SSL 将提交的密码发送到您的服务器
- (在服务器上)使用相同的盐对提交的密码进行哈希处理,并将其与存储的哈希密码进行比较
即使情况并非如此,要求浏览器(在用户的控制下)检查密码是否正确也是不安全的,因为用户可以查看 JavaScript 并在直接else
语句。
您需要执行以下操作:
$.ajax({
type: "POST",
url: "modify_profile.php",
data: {"firstname":firstname,"lastname":lastname, password: password},
success: function( data){ }
})
关于php - 将泄露密码的解决方案转变为安全的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18548499/