为什么单击登录按钮会导致重定向到错误的页面?
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()
. 提供的方法
当我点击登录按钮时,它会将我重定向到错误的页面。为什么?该代码未按预期方式运行。
登录页面:
<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()
. 提供的方法