为什么单击登录按钮会导致重定向到错误的页面?

Why does clicking the login button result in a redirection to the wrong page?

当我点击登录按钮时,它会将我重定向到错误的页面。为什么?该代码未按预期方式运行。

登录页面:

<html>
      <head>
        <title>Login Page</title>
    </head>

  <body>
     <form method='post' action='registration.php'>
        <table width='400' border='5' align='center'>
//when i hit login , it redirects to wrong page
          <tr>
               <td colspan='5' align='center'><h1>Login Form</h1></td>
          </tr>
/* I don't know what is wrong with this code */


          <tr>
               <td align='center'>Password:</td>
               <td><input type='password' name='pass' /></td>
          </tr>
//when i hit login , it redirects to wrong page
          <tr>
               <td align='center'>Email:</td>
               <td><input type='text' name='email' /></td>
          </tr>

          <tr>
               <td colspan='5' align='center'><input type='submit' name='login'      value='Login' /></td>
          </tr>

                 //login button not working
        </table>


     </form>

  <center><font color="red" size="5"><a href="registration.php">
    Sign Up Here</a></font></center> 

  </body>  

</html>

<?php
mysql_connect("localhost","root","");
mysql_select_db("users_db");
//when i hit login , it redirects to wrong page
if (isset($_POST['login'])) {
   $password = $_POST['pass'];
   $email = $_POST['email'];

   $check_user = "select * from users where user_pass='$password' AND user_email='$email'";

   $run = mysql_query($check_user);
//when i hit login , it redirects to wrong page
   if (mysql_num_rows($run)>0) {

     echo "<script>window.open('welcome.php','_self')</script>";
   }
   else  {
     echo "<script>alert('Email or password is incorrect')</script>";
   }

}  //when i hit login , it redirects to wrong page

?>

据我所知,当您单击 "Login" 时,您应该会进入一个名为 "registration.php" 的页面,我认为该页面会执行类似这样的操作:-

<?php // registration.php

$pass  = $_POST['pass']; // NOTE: Every hacker on the planet can see
$email = $_POST['email']; // this, so use some kind of filtering !

// Match $pass & $email to record in table
// If match print welcome and set-up session
// else print Email or password is incorrect

?>

我可以看到一些需要修复的项目:

  • 一种强大的重定向方法采用如下代码:

    header('Location: http://example.com/dir');
    exit();
    

    JavaScript 作为重定向设备通常会起作用,但它相当脆弱 - 页面在执行前已完全加载,而 header 则由浏览器更早地执行。

  • 要使其正常工作,您需要在 HTML 输出(在脚本开头)而不是在它之后处理它。为此,将 PHP 块移动到文件的开头。

  • 您的代码中还存在 SQL 注入漏洞 - 要解决此问题,请使用 mysql_real_escape_string($_POST['email']) 转义您的用户输入,或者最好切换到更新的数据库库,并使用参数绑定。
  • 当用户获得正确的凭据时,通常会设置一个 session 变量来指示这一点 - 目前您只是重定向到另一个页面。是什么阻止用户直接去那里?
  • 您似乎正在以纯文本格式存储密码。这不是一个好的做法,因为如果数据库被黑客窃取,您的任何用户在其他流行站点中重复使用他们的 email/password 组合将面临进一步黑客攻击的风险。您应该使用强大的散列和加盐方法,例如 password_hash().
  • 提供的方法