Каков наилучший способ защиты паролем папки/страницы с использованием php без db или имени пользователя
Каков наилучший способ защиты паролем папки с использованием php без базы данных или имени пользователя, но с использованием. В основном у меня есть страница, в которой будут перечислены контакты для организации, и вам необходимо защитить паролем эту папку, не имея учетной записи для каждого пользователя. Только один пароль, который меняется каждый раз так часто и распространяется в группу. Я понимаю, что это не очень безопасно, но тем не менее я хотел бы знать, как это сделать. Наилучшим образом.
Было бы неплохо, если бы пароль запоминался некоторое время, как только пользователь правильно ввел его.
Я делаю примерно то, что предложил Дэвид Хегги, кроме печенья. Кажется, это небезопасно, но, вероятно, лучше иметь плохую защиту паролем, а потом вообще нет.
Это для внутреннего сайта, где люди будут чертовски вспоминать свой логин и пароль и никогда не будут проходить процесс регистрации... если это действительно просто, они вообще не будут использовать систему.
Я хотел увидеть другие решения этой проблемы.
С пользовательской базой, состоящей из не очень высокотехнологичных людей, каковы другие способы сделать это.
Ответы
Ответ 1
Вы можете использовать что-то вроде этого:
//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
Это не очень приятное решение, но оно может сделать то, что вы хотите
Edit
Вы можете добавить страницу logout.php, например:
<?php
session_start();
$_SESSION['loggedIn'] = false;
?>
You have logged out
Ответ 2
Предполагая, что вы на Apache:
http://httpd.apache.org/docs/1.3/howto/htaccess.html#auth
Ответ 3
Если вы хотите избежать куки файлов, сеансов и не хотите играть с файлами .htaccess, вы также можете использовать http-аутентификацию soley с PHP:
http://www.php.net/manual/en/features.http-auth.php
Вы можете жестко скопировать пароль в файл и изменить его по мере необходимости или включить его из файла, который не находится в вашем каталоге web_accessible.
Недостатком является то, что у вас нет возможности форматировать экран входа в систему - это будет стандартное диалоговое окно проверки подлинности http
Ответ 4
Я сомневаюсь, что это будет считаться лучшим, но это сработает. И поскольку безопасность не кажется для вас большой проблемой, тот факт, что этот способ небезопасен, как ад, вероятно, не будет вас беспокоить.
Имейте страницу 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;
}
Я уверен, что вы получаете (крайне небезопасную) идею...
Ответ 5
Ну, так как вы знаете, что это небезопасно для начала, вы можете сохранить пароль в текстовом файле где-нибудь на своем веб-сервере. Когда кто-то обращается к странице, вы можете отобразить форму, которая запрашивает пароль. Если пароль соответствует тому, что находится в текстовом файле, вы перезагружаете страницу и отображаете информацию. Использование текстового файла позволит вам изменить пароль, не изменяя страницу, к которой они обращаются, когда вы хотите ее изменить. Вы все равно будете отправлять открытый текст везде, если вы не используете SSL. Дайте мне знать, если вам нужен код.