Защита паролем страницы без доступа к базе данных с помощью php

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

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

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

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


person esafwan    schedule 04.08.2010    source источник


Ответы (4)


Конечно, а почему бы и нет? Вы можете использовать плоские файлы в недоступном каталоге (защищенном .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/

person NullUserException    schedule 04.08.2010
comment
должен ли этот файл db быть php или текстовым? - person esafwan; 04.08.2010
comment
Чистый текст. Обратите внимание, что его нужно инициализировать. Создайте пустой и вставьте в него следующее: a:0:{} - person NullUserException; 04.08.2010
comment
@esafwan, прежде всего, вы должны позаботиться о защите файла паролей. это самая важная вещь для этой реализации. единственное, что действительно нуждается в рабочем примере, в отличие от всех этих бесполезных методов adduser. - person Your Common Sense; 04.08.2010
comment
Подавление ошибок - самоубийство, если вам когда-нибудь случится отлаживать. Если вы не хотите что-то рассказывать кому-то - сделайте это для кого-нибудь. отключить отображение ошибок. но пусть у программиста будет сообщение об ошибке - person Your Common Sense; 04.08.2010
comment
Извините, что спрашиваю больше ... я создал файл pass.txt с: 0: {}, затем сделал login.php с ним, include ('class.php'); $ login = новый SimpleLogin (); $ login- ›addUser ('safwan', 'пароль'); Просто для изучения вашего кода. class.php имеет свой класс! Но похоже, что это не работает. Но ошибки нет! - person esafwan; 04.08.2010
comment
Сработало Gr8 !!! Большое Вам спасибо!!! Я работаю над новаторской концепцией, я сообщу вам, как только она будет готова (если она сработает;))! - person esafwan; 04.08.2010

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

Order Allow,Deny
Deny from All
person Community    schedule 04.08.2010

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

person dst    schedule 04.08.2010

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

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

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

person Your Common Sense    schedule 04.08.2010