2013-03-27 1 views
1

Я пытаюсь создать веб-страницу с пользователями и информацией, доступ к которой может получить только зарегистрированный пользователь. Можно ли ограничить файлы, которые может видеть незарегистрированный пользователь? Если да, то как? У меня уже есть база данных MySQL с подключением в index.php. Вот то, что я до сих пор:Как вы можете ограничить доступ незарегистрированных пользователей, предоставляя зарегистрированным пользователям полный доступ?

<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

+0

Я хотел был иметь возможность иметь клиента (не вошедшего в систему), чтобы иметь ограниченный доступ к файлам на сайте, в то время как тот же самый пользователь, при входе в систему, получит больше доступа к файлам на веб-сайте. – Max

ответ

1

Я думаю, что проверка пользователя не является доказательством дурака. Вы должны сохранить токен в сеансе, чтобы помнить, что этот пользователь является зарегистрированным пользователем. Вам нужно создать общую php-страницу под названием Security.php, где вы поместите следующий код, потому что смарт-пользователь может напрямую ввести URL-адрес и перейти на ваши конфиденциальные страницы. Вам нужно включить эту страницу вверху каждой php-страницы, которую вы хотите защитить.

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

Большое спасибо – Max

1

Да. Запрос к базе данных для кого-то с указанным именем и паролем, используя запрос, который будет выглядеть примерно так:.

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

Если он дает какие-либо строки, пользователь существует, и вы должны позволить им в случае, если нет ни одной строки , то, что ком ­ бин ­ ­ Тион имени пользователя и пароля является недействительным, и вы не должны позволить им.

это основы, но если вы на самом деле собираетесь поместить это в производство, вы хотите внести еще несколько изменений:

  • Избегайте данных, которые вы помещаете в запрос соответствующим образом или используете подготовленные запросы. Как и ваш код уязвим для атаки 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

Вы можете поместить одно дополнительное поле в таблицу журналов «Роль».

Каждое время входа в систему. Проверьте, является ли он основным пользователем, затем он может получить доступ к большему доступу.

Если это дополнительный пользователь, то ограниченный доступ.

У вас есть моё мнение? Или любой запрос?

+0

Я понимаю, что вы имеете в виду – Max

Смежные вопросы