2011-11-23 4 views
0

私は、ログインまたは登録することができる2種類のユーザーを持っています:加盟店またはバイヤー。ディレクトリアプリケーションのセキュリティ

バイヤーとしてログインすると、action="check_buyer.php"を使用すると、自分のウェブサイトのlogin/buyer/にリダイレクトされます。しかし、今は、一度ログインすれば、私はlogin/buyerからlogin/merchantに変更することができます。これをどうやって防ぐのですか?あなたが見ることができるように私はセッションを使用しています...

データベースにINT(1)として保存され、私のセッションで呼び出される$_POST['userPermission'];のためのチェックをPHPで以下に実装しますか?

<?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

あなたは/メッセージを表示/リダイレクトセッションにユーザーの種類ログインを保存し、タイプが適切であればページのヘッダーで確認するか、ページを死ぬ必要があります...

例:

「USERTYPE」フィールドから例えばテーブルから

1.- Retrive $タイプ

$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 
+0

私はUSERTYPEはtinyint型(0または1)であると思いますが、あなたの両方に –

+0

おかげで最高のオプションです!頭に釘を打つ! – Walley

関連する問題