密码验证numrows == 0返回真正的未来问题?

时间:2016-03-19 21:57:13

标签: php mysql validation login passwords

我是php和sql编程的新手,并且创建了一个简单的登录,我在验证用户登录方面遇到了问题。过去2天我已经广泛搜索了网页并修复了它,但我不知道#39;我知道我的修复程序将来会以某种方式出现问题。这将是一个非常重要的计划,所以我在以后遇到问题之前真的很想知道。

连接数据库有效。注册表单有效。电子邮件激活有效使用下面的代码,登录似乎有效 - 它只允许在数据库中记录的电子邮件和密码以及不匹配的密码/电子邮件,使用$p_hash = password_hash($p, PASSWORD_DEFAULT);登录密码哈希的注册页面(根据我的理解,这是安全的)。然后使用下面的代码(以及一些javascript / ajax验证)来验证密码和电子邮件地址。使用$p = $_POST['p'];!password_verify($p, $db_pass_str)

我提到这一点,因为它似乎一直在解决这个问题。

$p = $_POST['p'];

// GET USER IP ADDRESS
$ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR'));
// FORM DATA ERROR HANDLING
if($e == "" || $p == ""){
    echo "login_failed";
    exit();
} else {
// END FORM DATA ERROR HANDLING
    $sql = "SELECT id, username, password FROM users WHERE email='$e' AND activated='1' LIMIT 1";
    $query = mysqli_query($db_conx, $sql);
    $row = mysqli_fetch_row($query);
    $db_id = $row[0];
    $db_username = $row[1];
    $db_pass_str = $row[2];
    if(!password_verify($p, $db_pass_str)){
        echo "login_failed";
        exit();
    } else {
        // CREATE THEIR SESSIONS AND COOKIES
        exit();
    }
}
exit();

上面的代码包含check_login_status.php,因此这导致我在一些check_login_status.php代码中发现问题。在我将if($numrows > 0)更改为以下代码之前的位置 - if($numrows == 0)

function evalLoggedUser($db_conx,$id,$u,$p){
$sql = "SELECT ip FROM users WHERE id='$id' AND username='$u' AND password='$p' AND activated='1' LIMIT 1"; 
$query = mysqli_query($db_conx, $sql);
$numrows = mysqli_num_rows($query);
if($numrows == 0){ ////////THIS COULD BE PROBLEMATIC?, WORKS FOR NOW!!!!!!!
    return true;
}}

因此,出于某种原因,它显示数据库中的行数等于0,这是不正确的。这似乎是因为密码哈希,因为这是我首先发现这个问题的方式,当我拿出AND password='$p'并使用if($numrows > 0)运行代码时,它就可以了。

此修改(if($numrows == 0))使登录验证工作正常,但我不希望它在将来出现问题。

任何帮助/意见/建议将不胜感激!

0 个答案:

没有答案