Защита паролем страницы без доступа к БД с помощью php - PullRequest
2 голосов
/ 04 августа 2010

Возможно ли защитить паролем страницу без доступа к БД?У меня может быть только несколько страниц.Но я должен иметь возможность сменить пароль, а также сохранить сеансы и т. Д. И я хочу безопасный способ, как для рабочего сайта!

Как хранить в config.php после md5:

 <?php
 username="admin"; 
 password="1a1dc91c907325c69271ddf0c944bc72";
 ?>

Если это хорошая идея, есть ли способ ограничить доступ к этому php только одним скриптом с именем check.php или чем-то еще?

Ответы [ 4 ]

2 голосов
/ 04 августа 2010

Конечно, а почему нет?Вы можете использовать плоские файлы в недоступном каталоге (защищенном .htaccess или из корня www) и использовать их в качестве базы данных.

Вот простой класс входа, который я создал:

class SimpleLogin {

    private $users;
    private $db = './pass.txt';

    function __construct() {
        $data = file_get_contents($this->db);

        if (!$data) {
           die('Can\'t open db');
        } else {
            $this->users = unserialize($data);
        }
    }

    function save() {
        if (file_put_contents($this->db, serialize($this->users)) === false)
            die('Couldn\'t save data');
    }

    function authenticate($user, $password) {
        return $this->users[$user] == $this->hash($password);
    }

    function addUser($user, $password) {
        $this->users[$user] = $this->hash($password);
        $this->save();
    }

    function removeUser($user) {
        unset($this->users[$user]);
        $this->save();
    }

    function userExists($user) {
        return array_key_exists($user, $this->users);
    }

    function userList() {
        return array_keys($this->users);
    }

    // you can change the hash function and salt here
    function hash($password) {
        $salt = 'jafo2ijr02jfsau02!)U(jf';
        return sha1($password . $salt);
    }

}

ПРИМЕЧАНИЕ : вам действительно следует отключить отчеты об ошибках, если вы собираетесь использовать это на реальном сервере.Это можно сделать, вызвав error_reporting () или добавив '@' перед file_get_contents и file_put_contents (т. Е. Так, что оно превращается в @file_get_contents)

Пример использования : http://left4churr.com/login/

2 голосов
/ 04 августа 2010

Вы должны использовать .htaccess, чтобы сделать это.Вы также можете защитить .htaccess ваши разумные php-файлы, например:

Order Allow,Deny
Deny from All
1 голос
/ 04 августа 2010

Вы можете использовать HTTP-аутентификацию с PHP . Очень хорошие примеры присутствуют в PHP-документе.

0 голосов
/ 04 августа 2010

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

Нет необходимости ограничивать доступваш php файл.Будучи вызванным по HTTP, это будет просто пустая страница и ничего более.

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

...