【问题标题】:Validation of password and confirm password in PHP Error shows all the timePHP错误中的密码验证和确认密码一直显示
【发布时间】:2017-09-02 14:30:29
【问题描述】:

所以我正在尝试创建一个登录表单,现在我正处于我想要验证密码和确认密码的部分。我使用的代码(您可以在下面找到)每次提交注册按钮时都会向我显示“密码和确认密码不匹配”,即使我输入了相同的密码。知道应该在我的代码中更改什么以消除错误吗?

<?php
session_start();

 include('includes/config.php');
include('includes/db.php');

function isUnique($email){
$query="select * from users where email ='$email'";
global $db;

 $result = $db->query($query);

if($result->num_rows>0){
return false;
}
else return true;
}

if(isset($_POST['register'])) {
$_SESSION['name']=$_POST ['name'];
$_SESSION['email']=$_POST ['email'];
$_SESSION['password']=$_POST ['password'];
$_SESSION['confirm_password']=$_POST ['confirm_password'];

if(strlen($_POST['name'])<3){
header("Location:register.php?err=".urlencode ("The name must be at least 3   characters long"));
exit();
}

else if(strlen($_POST['password']) < 5 ){
  header("Location:register.php?err=".urlencode ("The password should be at  least 5 characters"));
exit();
} 
else if(strlen($_POST['confirm_password']) < 5 ){
  header("Location:register.php?err=".urlencode ("The Confirm password     should be at least 5 characters"));
exit();
} 
else if(!isUnique($_POST['email'])){
  header("location:register.php?err=".urlencode ("Email is already in use.   Please use another one"));
exit();
}
else if($_POST['[password'] != $_POST['confirm_password']) {
     header("Location:register.php?err=".urlencode ("The password and confirm           password do not match"));
    exit();
    }

    }
    ?>

这是我在应该显示错误消息时放置条件的另一部分。

`<form action="register.php" method="post" style="margin-top:35px;">
  <h2> Register Here </h2>

  <?php
  if(isset ($_GET['err']))  { ?>

  <div class="alert alert-danger"><?php echo $_GET['err']; ?></div>
  <?php } 
  ?>`

【问题讨论】:

  • 这里的第一个问题是你为什么要写所有这些开始?这是一个学术项目吗?这种代码很难做到绝对完美,否则就会让您面临严重的安全风险。
  • 如果你想检查所有字段以验证所以不要使用 else if 单独为每个字段使用 if 因为在你的 else if 情况下如果第一个情况满足 true 那么所有下面的 else if case 不会满足执行
  • 这里有问题。仔细看。 $_POST['[password'] != $_POST['confirm_password']
  • 警告:这有一些严重的SQL injection bugs,因为在查询中使用了$_GET 数据。尽可能使用准备好的语句。在mysqliPDO 中执行这些操作非常简单,其中任何用户提供的数据都使用?:name 指示符指定,稍后使用bind_paramexecute 填充,具体取决于您是哪个使用。 切勿$_POST$_GET 数据直接放入您的查询中。
  • 警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。当任何现代development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。至少遵循recommended security best practices 并且永远不要将密码存储为纯文本

标签: php mysql forms session post


【解决方案1】:

你刚才打错了:

$_POST['password']代替$_POST['[password']

【讨论】:

  • 这是一个问题。
  • 这段代码有很多危险信号。在变得过于具体之前,我先问一下意图是什么。
  • 就像明显的 SQL 注入错误一样,如果这是一个公共网站,它可以在几秒钟内打开并劫持整个网站。之类的东西。还有一个 XSS 向量用于使用参数来传达错误消息。我不想在这里刻薄,但互联网上到处都是那些只想破坏你的生活并用垃圾感染你的网站的人。你必须小心。
  • @tadman 是的,我知道,但他只是问为什么它不起作用...... xD
  • “工作”在这里是一个主观的东西。如果此代码按原样运行,就会出现问题。这只是时间问题。
猜你喜欢
  • 2013-09-18
  • 2015-05-18
  • 2017-07-26
  • 1970-01-01
  • 2015-04-03
  • 2023-02-23
  • 1970-01-01
  • 2016-07-03
  • 1970-01-01
相关资源
最近更新 更多