Безопасность приложений каталога - PullRequest
0 голосов
/ 23 ноября 2011

Итак, у меня есть два типа пользователей, которые могут войти или зарегистрироваться: продавцы или покупатели.

Когда я вхожу как покупатель, используя: action="check_buyer.php", он перенаправляет меня на login/buyer/ на моем сайте. Но прямо сейчас, после входа в систему, я могу изменить URL-адрес с login/buyer на login/merchant, и это работает. Как мне предотвратить это? Как вы можете видеть, я использую сессии ...

Как реализовать ниже в PHP проверку для $_POST['userPermission'];, которая будет храниться как INT (1) в базе данных и вызываться в моих сеансах ??

<?php
session_start(); #recall session from index.php where user logged include()

require_once('../inc/db/dbc.php');
$connect = mysql_connect($h, $u, $p) or die ("Can't Connect to Database.");
mysql_select_db($db);

$LoginUserName = $_POST['userName'];
$LoginPassword = mysql_real_escape_string($_POST['userPass']);
//connect to the database here
$LoginUserName = mysql_real_escape_string($LoginUserName);
$query = "SELECT uID, uUPass, dynamSalt
        FROM User
        WHERE uUName = '$LoginUserName';";
$result = mysql_query($query);
if(mysql_num_rows($result) < 1) //no such USER exists
{
    echo "Invalid Username and/or Password";
}
$ifUserExists = mysql_fetch_array($result, MYSQL_ASSOC);

$dynamSalt = $ifUserExists['dynamSalt'];  #get value of dynamSalt in query above
$SaltyPass = hash('sha512',$dynamSalt.$LoginPassword); #recreate originally created dynamic, unique pass

if($SaltyPass != $ifUserExists['uUPass']) # incorrect PASS
{
    echo "Invalid Username and/or Password";
}

else {
validateUser();
}
// If User *has not* logged in yet, keep on /login
if(!isLoggedIn())
{
    header('Location: index.php');
    die();
}

function validateUser()
{
    session_regenerate_id ();
    $_SESSION['valid'] = 1;
    $_SESSION['uID'] = $userid;
}

function isLoggedIn()
{
    if(isset($_SESSION['valid']) && $_SESSION['valid'])
        header( 'Location: buyer/' ); # return true if sessions are made and login creds are valid
    echo "Invalid Username and/or Password";  
    return false;
}
?>

1 Ответ

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

Вы должны сохранить тип пользователя при входе в сеанс и проверить заголовки страниц, если тип правильный, или умереть на странице / перенаправить / показать сообщение ...

Пример:

1.- Извлечь $ type из таблицы, например, из поля «userType»

$query = "SELECT uID, uUPass, dynamSalt,userType FROM User WHERE uUName = '$LoginUserName';";

2.- Добавить в сеанс при входе в систему значение типа

function validateUser() {
    session_regenerate_id ();
    $_SESSION['valid'] = 1;
    $_SESSION['uID'] = $userid;
    $_SESSION['type'] = $userType; // 1 for buyer - 2 for merchant
}

3.- На каждой странице, ограниченной пользователем, используйте код на голове, чтобы получить, если пользователь действителен

Пример для страницы только для покупателя:

session_start();
if($_SESSION['type']!=1){ die("You are not a buyer. Access denied"}

// The rest of your page here

Пример для страницы только для продавца:

session_start();
if($_SESSION['type']!=2){ die("You are not a merchant. Access denied"}

// The rest of your page here
...