PHP-код позволяет войти без правильного пароля - PullRequest
0 голосов
/ 20 ноября 2011

Я пишу код 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 поля; идентификатор пользователя и пароль. Чтобы проверить код, я вставил в таблицу значения «admin» и «12345678».

Ответы [ 3 ]

1 голос
/ 20 ноября 2011

Вот где ваша проблема:

$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);

Пожалуйста, попробуйте это и дайте нам знать, что происходит.

[править / дополнительно]: я настоятельно рекомендую вам взглянуть на следующее:

Использование 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)

0 голосов
/ 20 ноября 2011

Я не вижу причин, по которым это не работает, как вы ожидали, я подозреваю, что проблема может быть в другом месте.Например, я не вижу, чтобы вы проверяли, зарегистрирован ли уже сеанс SES_Admin.Но, по крайней мере, вам нужно заменить строки 5 и 6 этим, иначе кто-то может потенциально удалить всю вашу пользовательскую таблицу и совершить другие вредоносные действия с вашими базами данных MySQL.

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

Пожалуйста, прочитайте статьюна mysql_real_escape_string на http://php.net/manual/en/function.mysql-real-escape-string.php

0 голосов
/ 20 ноября 2011

просто устранение неполадок необходимо. сколько строк возвращается? Каковы значения userID и passID в запросе, который возвращает строки? сделать несколько перерывов и посмотреть, что происходит. Я не вижу проблемы, но трудно устранить неисправность кода, размещенного здесь, так как он действительно не может быть запущен без БД.

...