2013-03-27 98 views
1

我正在嘗試創建一個只能由註冊用戶訪問的用戶和信息的網頁。是否可以限制未註冊用戶可以看到的文件?如果是這樣,怎麼樣?我已經在index.php中有一個連接了MySQL數據庫。這是我到目前爲止:如何在給予註冊用戶完全訪問權限的同時限制未註冊用戶的訪問?

<head></head> 
<body> 
    <h3>Signup Here:</h3> 
     <form method="post" action="userindex.php"> 

       Please enter user name: <input type="text" name="username" value="" /><br /> 
       Please enter password: <input type="password" name="password" value="" /> 
       <br /> 
       <input type="submit" value="Submit"/> 



     </form> 
</body> 

<?php 
include ("dbroutines.php"); 

if (isset($_POST['username'])) { 


    if ($_POST['username']>'' && $_POST['password']>'') { 
     $q="insert into users (Name, Password) values ('".$_POST['username']."', '".$_POST['password']."')"; 
     echo 'query='.$q; 
     $conn=db_connect(); 
     $result=$conn->query($q); 
     echo '<br />xxx'.$conn->error."xxx"; 
     unset($_POST['username']); 
     unset($_POST['password']); 
    } else { 
     echo 'Please enter both username AND password!'; 
    } 

} 

$q="select Name, Password from users"; 
$conn=db_connect(); 
$result=$conn->query($q); 
echo 'xxx'.$conn->error."xxx"; 
if ($result){ 




      echo '<hr />'; 
      for ($count=0; $row=$result->fetch_row(); ++$count) { 
       echo $count." Name=".$row[0]." password=".$row[1].'<br />'; 

      } 
      echo '<b style="color:red;">there are '.$count.' users in your database!'.'</b><hr />'; 
} 

由此,你可以指定什麼樣的用戶可以訪問某些文件,如userindex.php?

+0

我不明白你的觀點。你想在登錄後給你的網站訪問權限嗎?你想要什麼?你能再解釋一次嗎? – chintan 2013-03-27 02:51:33

+0

我想要的是能夠讓客戶端(未登錄)對網站上的文件進行有限的訪問,而同一用戶在登錄時可以訪問網站上的文件。 – Max 2013-03-27 03:07:24

回答

1

我認爲驗證用戶不是傻瓜證明的解決方案。您必須在會話中保留一個令牌才能記住該用戶是註冊用戶。您必須創建一個通用的php頁面,名爲Security.php,您將放置以下代碼,因爲智能用戶可以直接輸入URL並訪問您的機密頁面。您需要將此頁面包含在您想要保護的每個php頁面的頂部。

  if (!isset($_SESSION['AuthId'])) { 
     header('Location:Login.php'); 
     exit; 
     } 
+0

非常感謝你 – Max 2013-03-27 03:16:08

1

是的。使用查詢,將是這個樣子查詢數據庫有人給定的用戶名和密碼。

select * from users where Name = 'john.doe' and Password = 'hunter2' limit 1 

如果產生任何行,用戶存在,你應該讓他們如果沒有行,那麼COM ­斌­一個­重刑的用戶名和密碼是無效的,你不應該讓他們進來。

這是基礎知識,但是如果你確實打算把這個投入生產,你會想做一些更改:

  • 正確地轉移您在查詢中放入的數據或使用準備好的查詢。原樣,您的代碼易受到SQL injection攻擊。比如說,我試圖在用戶名或密碼中用撇號創建一個帳戶。你的代碼會中斷。這也可以用於惡意手段,所以你真的應該修補它。

    修補它的最簡單方法是,在將其放入查詢之前,使用例如mysql_real_escape_string將其解決。這可能會工作,但更好(因爲整個mysql_函數家族已被棄用)將使用準備好的查詢和PDO,如下所示。

  • 哈希和加密你的密碼,這樣一個數據庫的妥協(如果上面的漏洞沒有被修補,這可能會很容易發生)不會泄露所有的密碼。然後

您的代碼可能是這樣的:

// You'd probably want to put these in a separate configuration file. 
$db = new PDO('mysql:dbname=test', 'my_mysql_user', 'hunter2'); 

// Make any errors throw an exception. 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$query = $db->prepare('select * from users where Name = :name limit 1'); 
$query->bindValue(":name", $_POST['username'], PDO::PARAM_STR); 
$row = $query->fetch(PDO::FETCH_ASSOC); 

if($row === FALSE) { 
    // User not in the database; don't let them in. 
} 

$calculatedHash = hash("sha512", $row['PasswordSalt'] . $_POST['password']); 
if($calculatedHash === $row['PasswordHash']) { 
    // Password's right. Let them in. 
}else{ 
    // Password's wrong. Keep them out. 
} 

進一步的改進是使用,也就是說,bcrypt而不是鹹魚SHA-512。

1

您可以將一個額外的字段放在loggin表名'角色'中。

每個登錄時間。檢查它是否是主用戶,然後它可以訪問更多的訪問權限。

如果是額外的用戶,則限制訪問。

你明白了嗎?或者任何查詢?

+0

我明白你的意思 – Max 2013-03-27 03:26:40

相關問題