2008-11-13 5 views
22

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

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

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

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

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

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

ответ

63

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

//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 
+5

+1 Для использования алгоритма хеширования для предварительного и хранения. Хотя SHA2 или, по крайней мере, SHA1 были бы более безопасными. – willasaywhat 2008-11-13 14:20:35

-2

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

+0

Если текстовый файл не находится в общедоступном каталоге, это безопасно, как HTTP basic auth и большинство различных реализаций php (без слоя SSL), поэтому я не получаю вниз голосов ...? – lol 2013-07-18 21:33:04

1

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

Имейте страницу 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 

каждый «защищенный» страница будет затем проверить это печенье:

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

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

4

Если вы хотите, чтобы избежать куки, сессий и не хотят играть с .htaccess файлов, вы также можете сделать HTTP Authentication Soley с PHP:

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

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

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

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

  • Нет связанных вопросов^_^