【发布时间】:2013-12-18 08:40:22
【问题描述】:
您好,我正在尝试制作忘记密码脚本并成功完成,但我遇到了一个问题。在forgot.php中,当用户输入电子邮件时,脚本会检查数据库中的电子邮件是否匹配,然后它将激活码保存在数据库中,并将激活码发送到他的电子邮件地址。
收到电子邮件后点击链接,他会在resetpass.php中重置密码表格首先检查激活码是否与数据库中的代码匹配,如果是,那么用户将输入他的新密码,它会重置他的密码,但问题是密码没有改变谁输入了他的电子邮件,它改变了其他人的密码:D。我不知道这个脚本出了什么问题
Forgot.php
<?php
error_reporting(0);
if($_POST['submit']=='Send')
{
//keep it inside
$email=$_POST['email'];
$code = $_GET['activation_code'];
$con=mysqli_connect("Localhost","root","123","user");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query = mysqli_query($con,"select * from login where user_email='$email'")
or die(mysqli_error($con));
if (mysqli_num_rows ($query)==1)
{
$code=rand(100,999);
$message="You activation link is: http://bing.fun2pk.com/resetpass.php?email=$email&code=$code";
mail($email, "ZatWing", $message);
echo 'Email sent';
$query2 = mysqli_query($con,"update login set activation_code='$code' where user_email='$email' ")
or die(mysqli_error($con));
}
else
{
echo 'No user exist with this email id';
}}
?>
<form action="forgot.php" method="post">
Enter you email ID: <input type="text" name="email">
<input type="submit" name="submit" value="Send">
</form>
resetpass.php
<?php
if(isset($_GET['code'])) {
$acode = $_GET['code'];}
echo $acode;
if(isset($_POST['pass'])){
$pass = $_POST['pass'];
$con=mysqli_connect("xxx","xxx","xxx","xxx");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query = mysqli_query($con,"select * from login where activation_code='$acode'")
or die(mysqli_error($con));
if (mysqli_num_rows ($query)==1)
{
$query3 = mysqli_query($con,"update login set Password='$pass' where activation_code='$acode'")
or die(mysqli_error($con));
echo 'Password Changed';
}
else
{
echo 'Wrong CODE';
}}
?>
<form action="resetpass.php" method="POST">
<p>New Password:</p><input type="password" name="pass" />
<input type="submit" name="submit" value="Signup!" />
</form>
【问题讨论】:
-
Forgot.php 中的内容是什么,$code = $_GET['activation_code']; ??我猜你正在生成随机代码:$code=rand(100,999);
-
$code=rand(100,999);那么什么会阻止任何人通过使用脚本运行所有可能性来清除/更改您的所有密码?另外,您现在已经向互联网提供了登录详细信息mysqli_connect("mysql.3gwebhosters.com","u777946695_root","melody,123","u777946695_user");,可能需要更改它们。 -
你可以使用 mysql_real_escape_string() 来防止 SQL 注入攻击 :)
-
@Ravi mysql_real_escape_string() 与SQL注入攻击无关
-
@Ravi 不管它在这里是否相关,你还是想使用
mysqli_real_escape_string,因为mysql*命令已被弃用。