0

因此,我使用 php 和 mysql 数据库整理了一个非常粗略的登录表单,并设置(或者我认为)使用“loginFailed=true&reason=password”重定向回登录页面。我正在尝试只是让它重定向回登录,并显示错误的密码消息,但它只是重定向到主索引页面。

我在这里做错了什么?当然,由于我缺乏编码知识,我从一些预先存在的代码中大量借用了代码,但在重定向之前它确实按预期工作了一段时间。

这是代码:

密码检查.php

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form 
$password=$_POST['password']; 

// To protect MySQL injection (more detail about MySQL injection)
$password = stripslashes($password);
$password = mysql_real_escape_string($password);
$sql="SELECT * FROM $tbl_name WHERE password='$password'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
session_register("password"); 
header("location:admin.html");
}

else {
die(header("location:login.html?loginFailed=true&reason=password"));
}
?>

这是登录页面中的密码字段:

<span class="add-on"><i class="icon-list-alt"></i></span>
<input type="password" id="inputIcon" class="span4" name='password' id='password' maxlength="50" placeholder="<?php $reasons = array("password" => "Yo shitbird, wrong password."); if ($_GET["loginFailed"]) echo $reasons[$_GET["reason"]]; ?>" />
</div>
4

1 回答 1

0

尝试将header()命令移出die()通话:

else {
    header("location:login.html?loginFailed=true&reason=password");
    die();
}

这段代码还有很多其他潜在的问题,我建议阅读一些关于这个主题的教程,那里有很多;尽管要小心,但有许多低质量的 PHP 教程可能会教给您危险的做法。了解有关PHP 安全性的更多信息很重要,特别是如果此代码将位于可公开访问的 Web 服务器上。

问题之一是您以纯文本形式存储密码。密码永远不应该以纯文本形式存储,它们应该被加盐并使用安全的散列算法存储。PHPass是一个很好的工具来帮助解决这个问题。

于 2012-11-15T00:04:17.490 回答