Каков наилучший способ защитить паролем папку / страницу, используя php без имени пользователя или имени пользователя? - PullRequest
21 голосов
/ 13 ноября 2008

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

Было бы неплохо, если бы пароль запомнился на некоторое время, как только пользователь ввел его правильно.


Я делаю примерно то, что предложил Дэвид Хегги, кроме как без печенья. Это кажется небезопасным, как ад, но, вероятно, лучше иметь плохую защиту паролем, чем вообще ничего.

Это для внутреннего сайта, где люди будут чертовски запоминать свои логин и пароль и никогда не пройдут процесс регистрация ... если только это не очень легко, они не будут использовать систему в все.

Я хотел бы увидеть другие решения этой проблемы.

С пользовательской базой, состоящей из не очень технически подкованных людей, какие есть другие способы сделать это.

Ответы [ 5 ]

64 голосов
/ 13 ноября 2008

Вы можете использовать что-то вроде этого:

//access.php

<?php
//put sha1() encrypted password here - example is 'hello'
$password = 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d';

session_start();
if (!isset($_SESSION['loggedIn'])) {
    $_SESSION['loggedIn'] = false;
}

if (isset($_POST['password'])) {
    if (sha1($_POST['password']) == $password) {
        $_SESSION['loggedIn'] = true;
    } else {
        die ('Incorrect password');
    }
} 

if (!$_SESSION['loggedIn']): ?>

<html><head><title>Login</title></head>
  <body>
    <p>You need to login</p>
    <form method="post">
      Password: <input type="password" name="password"> <br />
      <input type="submit" name="submit" value="Login">
    </form>
  </body>
</html>

<?php
exit();
endif;
?>

Затем на каждом файле, который вы хотите защитить, поставьте вверху:

<?php
require('access.php');
?>
secret text

Это не очень хорошее решение, но оно может делать то, что вы хотите

Редактировать

Вы можете добавить страницу logout.php, например:

<?php
    session_start();
    $_SESSION['loggedIn'] = false;
?>
You have logged out   
8 голосов
/ 13 ноября 2008

Предполагается, что вы на Apache:

http://httpd.apache.org/docs/1.3/howto/htaccess.html#auth

4 голосов
/ 14 ноября 2008

Если вы хотите избежать файлов cookie, сеансов и не хотите играть с файлами .htaccess, вы также можете выполнить аутентификацию http просто с помощью PHP:

http://www.php.net/manual/en/features.http-auth.php

Вы можете жестко запрограммировать пароль в файл и изменить его при необходимости или включить его из файла, отсутствующего в каталоге web_accessible.

Недостатком является то, что у вас нет возможности отформатировать экран входа в систему - это будет стандартное диалоговое окно аутентификации http

1 голос
/ 13 ноября 2008

Я сомневаюсь, что это будет считаться лучшим , но это сработает. А поскольку безопасность не кажется для вас большой проблемой, тот факт, что этот путь небезопасен, черт возьми, вас тоже не беспокоит.

Иметь страницу login.php, которая принимает пароль, а затем устанавливает cookie, если данные для входа верны. Каждый php-файл может затем проверить наличие cookie, чтобы определить, «вошел ли пользователь» или нет, и отобразить информацию соответствующим образом.

login.php
...
if(isset($_POST['password']) && $_POST['password'] == 'my_top_secret_word') {
    setcookie('loggedin', 'true', time() + 1200, '/url/');
} else {
    setcookie('loggedin', 'false', time() - 1200, '/url/');
    // display a login form here
}
etc

каждая «защищенная» страница будет проверять наличие этого cookie:

if(isset($_COOKIE['loggedin'])) {
    if($_COOKIE['loggedin'] == 'true') {
        $showHidden = true;
    } else {
        $showHidden = false;
    }
} else {
    $showHidden = false;
}

Я уверен, что вы поняли (крайне небезопасно) идею ...

0 голосов
/ 13 ноября 2008

Ну, так как вы знаете , с самого начала небезопасно, вы можете хранить пароль в текстовом файле где-то на вашем веб-сервере. Когда кто-то заходит на страницу, вы можете показать форму, которая запрашивает пароль. Если пароль совпадает с тем, что находится в текстовом файле, то вы перезагрузите страницу и отобразите информацию. Использование текстового файла позволит вам изменить пароль, не изменяя страницу, к которой он обращается, когда вы захотите изменить его. Вы по-прежнему будете отправлять открытый текст везде, если не используете SSL. Дайте мне знать, если вам нужен код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...