2010-08-04 11 views
2

Est-il possible de protéger par mot de passe une page sans accès DB? Je peux avoir seulement quelques pages. Mais je devrais pouvoir changer le mot de passe et aussi enregistrer des sessions etc. Et je veux un moyen sécurisé comme c'est pour le site de production!Mot de passe protéger une page sans accès DB avec php

Comment est-il à stocker dans un config.php après md5:

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

Si cela est une bonne idée, est-il un moyen de restreindre l'accès à ce php à partir de seulement un seul script appelé check.php ou quelque chose?

Répondre

2

Bien sûr, pourquoi pas? Vous pouvez utiliser des fichiers plats dans un répertoire inaccessible (protégé par .htaccess ou hors de la racine www) et l'utiliser comme base de données.

est ici une simple classe de connexion que j'ai fouetté:

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); 
    } 

} 

NOTE: Vous devriez vraiment désactiver les rapports d'erreurs si vous allez l'utiliser dans un serveur réel. Cela peut être fait en appelant error_reporting() ou en ajoutant « @ » devant file_get_contents et file_put_contents (ex: il se transforme en @file_get_contents)

Exemple d'utilisation: http://left4churr.com/login/

+0

ce fichier db devrait-il être un php ou du texte? – esafwan

+0

Texte pur. Notez qu'il doit être "initialisé". Créer un vide et mettre ceci: 'a: 0: {}' – NullUserException

+0

@esafwan surtout vous devez être concerné par la protection du fichier de mot de passe. C'est la chose la plus importante pour cette implémentation. la seule chose qui a vraiment besoin d'un exemple de travail, contrairement à toutes ces méthodes adduser inutiles. –

2

Vous devez utiliser .htaccess pour le faire. Vous pouvez également protéger vos fichiers par .htaccess php sensibles, avec quelque chose comme:

Order Allow,Deny 
Deny from All 
0

En fait, une base de données ont rien à voir avec la protection par mot de passe.
vous pouvez écrire un login et un mot de passe directement dans votre script, ainsi que de rester dans la base de données.

Vous n'avez pas besoin de restreindre l'accès à votre fichier php. Étant appelé sur HTTP, ce sera juste une page blanche et rien de plus.

Donc, c'est bien de le stocker de cette façon.
Suffisamment pour le site qui n'utilise même pas une base de données.