PHP代码允许在没有正确密码的情况下登录

时间:2011-11-20 05:28:53

标签: php mysql admin

我正在为我的网站编写PHP代码。目前,我的代码存在一些问题。

这是我的代码。忽略一些使用的马来语,我试图翻译它们中的大多数。

<?php
session_start();
include "../library/inc.connectiondb.php";

$txtUser  = $_POST['txtUser'];
$txtPass  = $_POST['txtPass'];

if(trim($txtUser) == "") {
  echo "<b>User ID</b> is empty, please fill";
  include "login.php";
}
else if(strlen(trim($txtPass)) <= 5) {
  echo "<b>Password</b> is less then 6 characters, please fix";
  include "login.php";
}
else {  
  $sqlPeriksa = "SELECT userID FROM admin WHERE userID='$txtUser'";
  $qryPeriksa = mysql_query($sqlPeriksa, $sambung);
  $hslPeriksa = mysql_num_rows($qryPeriksa);

  if($hslPeriksa == 0) {
    # If username doesn't exist
    echo "<b>UserID</b> doesn't exist";
    include "login.php";
  }

  else {
    $sqlPassword = "SELECT passID FROM admin WHERE (userID='$txtUser' && passID='$txtPass')";
    $qryPassword = mysql_query($sqlPeriksa, $sambung);
    $hslPassword = mysql_num_rows($qryPassword);

    if($hslPassword < 1) {
      # If password is incorrect
      echo "<b>Password</b> is incorrect";
      include "login.php";
    }

    else {
      # If login successful
      $SES_Admin = $txtUser;
      session_register('SES_Admin');

      echo "LOGIN SUCCESSFUL";

      # Redirect to index.php
      echo "<meta http-equiv='refresh' content='0; url=index.php'>";
      exit;
    }
  }
}
?>

问题是即使密码错误,此代码也允许我登录。我做了一些搜索,但仍然没有解决我的问题。我很确定问题出在第27行。

所以,如果有人有解决方案,请快速告诉我。我正在为我的学校编写这段代码,并且必须在明年之前完成。

修改 好吧,我已经在代码中放置了 mysql_real_escape_string ,就像许多人告诉我的那样。我不知道这会有什么帮助,但是这个mysql表名为“admin”。它有2个领域; userID和passID。为了测试代码,我在表中插入了值“admin”和“12345678”。

3 个答案:

答案 0 :(得分:1)

这就是您的问题所在:

$sqlPassword = "SELECT passID FROM admin WHERE (userID='$txtUser' && passID='$txtPass')";
$qryPassword = mysql_query($sqlPeriksa, $sambung);
$hslPassword = mysql_num_rows($qryPassword);

您看,您的mysql_query正在执行$sqlPeriksa,即:

$sqlPeriksa = "SELECT userID FROM admin WHERE userID='$txtUser'";

相反,您的代码应该是这样的:

$sqlPassword = "SELECT passID FROM admin WHERE (userID='$txtUser' && passID='$txtPass')";
$qryPassword = mysql_query($sqlPassword, $sambung);
$hslPassword = mysql_num_rows($qryPassword);

请尝试一下,让我们知道会发生什么。

[edit / additional]:我强烈建议您查看以下内容:

使用PDO:

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

使用存储过程:

http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

使用PDO +存储过程:

http://php.net/manual/en/pdo.prepared-statements.php(参见示例#4)

答案 1 :(得分:0)

只需简单的故障排除是必要的。返回多少行?返回行的查询中userID和passID的值是多少?休息一下,看看发生了什么。我没有看到问题,但它很难解决这里发布的代码,因为它真的无法在没有数据库的情况下运行。

答案 2 :(得分:0)

我认为没有任何理由不按预期工作,我怀疑问题可能在其他地方。例如,我没有看到您检查是否已注册“SES_Admin”会话。但至少你需要用这个替换第5行和第6行,否则有人可能会删除你的整个用户表,并用你的MySQL数据库做各种其他恶意的事情。

$txtUser  = mysql_real_escape_string($_POST['txtUser']);
$txtPass  = mysql_real_escape_string($_POST['txtPass']);

请在http://php.net/manual/en/function.mysql-real-escape-string.php

上阅读mysql_real_escape_string上的文章