Войти без правильного пароля ... Как мне исправить? - PullRequest
0 голосов
/ 13 февраля 2012

Я создаю страницу входа для моего сайта.Я использовал Dreamweaver для создания кода входа.Я не знаю много о php, , но когда я захожу с неверным паролем (но с правильным именем пользователя), это позволяет мне войти в ограниченную часть сайта.

Например: предположимправильное имя пользователя - test, а правильное имя пользователя - test123.Когда пользователь вводит «test» для имени пользователя и вводит любую букву (хотя, если вы вводите число, оно не пропускает вас) для пароля, он регистрирует их и пропускает.Это было бы плохо ...

Есть ли способ убедиться, что сайт проверяет правильность и пароля и имени пользователя?

Я почти ничего не знаю о php.Поэтому любая помощь будет принята с благодарностью.

Вот мой код для входа в систему:

<?php
require_once('Connections/--------_userdatabase.php');

if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = ""){
    if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
    }

    $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

    switch ($theType) {
        case "text":
            $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
            break;    
        case "long":
        case "int":
            $theValue = ($theValue != "") ? intval($theValue) : "NULL";
            break;
        case "double":
            $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
            break;
        case "date":
            $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
            break;
        case "defined":
            $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
            break;
    }
    return $theValue;
}


// *** Validate request to login to this site.
if (!isset($_SESSION)) {
    session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
    $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['username'])) {
    $loginUsername=$_POST['username'];
    $password=$_POST['password'];
    $MM_fldUserAuthorization = "";
    $MM_redirectLoginSuccess = "http://www.-----------.org";
    $MM_redirectLoginFailed = "http://www.-----------.org/login.php";
    $MM_redirecttoReferrer = false;
    mysql_select_db($database_-------_userdatabase, $--------_userdatabase);

    $LoginRS__query=sprintf("SELECT Username, Password FROM userdatabase WHERE Username=%s AND Password=%s",
    GetSQLValueString($loginUsername, "int"), GetSQLValueString($password, "int")); 

    $LoginRS = mysql_query($LoginRS__query, $--------_userdatabase) or die(mysql_error());
    $loginFoundUser = mysql_num_rows($LoginRS);
    if ($loginFoundUser) {
        $loginStrGroup = "";

        if (PHP_VERSION >= 5.1) {
            session_regenerate_id(true);
        } else {
            session_regenerate_id();
        }
        //declare two session variables and assign them
        $_SESSION['MM_Username'] = $loginUsername;
        $_SESSION['MM_UserGroup'] = $loginStrGroup;       

        if (isset($_SESSION['PrevUrl']) && false) {
            $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];    
        }
        if ($loginUsername === 'Admin') {
            header("Location: http://www.------------.org/user/-------/");
        } else if ($loginUsername === 'User') {
            header("Location: http://www.------------.org/user/-------/");
        } else if ($loginUsername === 'User2') {
            header("Location: http://www.-----------.org/user/--------/");
        } else {
            header("Location: " . $MM_redirectLoginSuccess );
        }
    } else {
        header("Location: ". $MM_redirectLoginFailed );
    }
}
?>

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Вы должны добавить die(); после перенаправления header(), так как header() only отправляет заголовок в браузер, даже не зная, что это значит.Затем он продолжает обслуживать контент, как обычно, если после него нет die().

Частичный пример

<?php
if ($loginFoundUser) {
 // Put the cut out code back in
 if (isset($_SESSION['PrevUrl']) && false) {
  $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; 
 }
 if ($loginUsername === 'Admin') {
  header("Location: http://www.------------.org/user/-------/");
  die;
 } else if ($loginUsername === 'User') {
  header("Location: http://www.------------.org/user/-------/");
  die;
 } else if ($loginUsername === 'User2') {
  header("Location: http://www.-----------.org/user/--------/");
  die;
 } else {
  header("Location: " . $MM_redirectLoginSuccess );
  die;
 }
} else {
 header("Location: ". $MM_redirectLoginFailed );
 die;
}
?>

Кроме того, похоже, что вы конвертируете значения вINT перед проверкой значений в базе данных, что не следует делать (учитывая, что действительный $loginUsername равен 'Admin').Это можно изменить с помощью следующего кода:

GetSQLValueString($loginUsername, "string"), GetSQLValueString($password, "string"));
0 голосов
/ 14 февраля 2012

Следующая ссылка - зона ограниченного доступа?

http://www. ------------. Орг / пользователь / ------- /

...