Avatar billede internet Nybegynder
22. oktober 2006 - 00:55 Der er 15 kommentarer og
1 løsning

Htaccess og tilføje brugere

Hej Eksperter

Jeg bruger .htaccess til mit login-system.

Jeg har indtil videre manuelt tilføjet brugere i min password fil, men tænkte at det måske kunne gøres smartere.

Derfor er mit spørgsmål: Er det muligt at lave et php-script, hvor man kan tilføje et brugernavn og password til en (.htacces) password-fil?
Avatar billede coderdk Praktikant
22. oktober 2006 - 01:35 #1
Med file_get_contents/fopen/fwrite/flock/fclose kan du vel, formatet er username:password hvor password som regel er krypteret med systemets crypt() (php's crypt() er det samme)...
Men hvorfor vil du have det til at være .htaccess? Hvorfor ikke bruge php-logins med sessions?
Du kan også selv lave din egen "pseudo-htaccess user/password prompt": http://dk.php.net/features.http-auth
Avatar billede straszek Praktikant
22. oktober 2006 - 09:23 #2
jeg bruger denne class http://aspn.activestate.com/ASPN/Cookbook/PHP/Recipe/108479 - til mit system der ligesom dit er baseret på php & .htaccess

den virker upåklageligt
Avatar billede internet Nybegynder
22. oktober 2006 - 10:38 #3
@straszek: Jeg har afvist dit svar fordi jeg ikke har været i stand til at få scriptet til at virke. Jeg forstår ikke hvordan det script virker, jeg har prøvet for sjov at sætte den op på min server, men den giver bare en blank side.
Avatar billede internet Nybegynder
22. oktober 2006 - 10:45 #4
@coderdk: Jeg kan godt få dit eksempel til at virke, men hvor henter den brugernavn og password fra?
Avatar billede straszek Praktikant
22. oktober 2006 - 11:00 #5
så kunne du måske have spurgt om hjælp.....
Avatar billede internet Nybegynder
22. oktober 2006 - 11:28 #6
Det gør jeg da også.

Jeg har brug for hjælp, da jeg ikke selv forstår det nævnte eksempel og hvordan jeg skal opsætte det.
Avatar billede straszek Praktikant
22. oktober 2006 - 11:46 #7
fortæl hvad du har gjort
Avatar billede coderdk Praktikant
22. oktober 2006 - 12:01 #8
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
  header('WWW-Authenticate: Basic realm="My Realm"');
  header('HTTP/1.0 401 Unauthorized');
  echo 'Text to send if user hits Cancel button';
  exit;
} else {
  // HER SKAL DU CHECKE OM $_SERVER['PHP_AUTH_USER'] passer med $_SERVER['PHP_AUTH_PW']
  // DU KAN BRUG EN DATABASE, ELLER HVAD DU HAR LYST TIL.
  // ER KODEN FORKERT SENDER DU BLOT "401 Unauthorized" SOM OVENFOR
  echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
  echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>
Avatar billede internet Nybegynder
22. oktober 2006 - 12:14 #9
@straszek:
Jeg har brugt følgende kode:

<?

/**
* Class for handling htaccess of Apache
* @author    Sven Wagener <sven.wagener@intertribe.de>
* @copyright Intertribe - Internetservices Germany
* @include     Funktion:_include_
*/

class htaccess{
    var $fHtaccess="domæne.dk/cms/.htaccess"; // path and filename for htaccess file
    var $fHtgroup="";  // path and filename for htgroup file
    var $fPasswd=".htmaster/.ok_user";  // path and filename for passwd file
   
    var $authType="Basic"; // Default authentification type
    var $authName="Internal area"; // Default authentification name

    /**
    * Initialising class htaccess
    */
    function htaccess(){
    }

    /**
    * Sets the filename and path of .htaccess to work with
    * @param string    $filename    the name of htaccess file
    */
    function setFHtaccess($filename){
        $this->fHtaccess=$filename;
    }
   
    /**
    * Sets the filename and path of the htgroup file for the htaccess file
    * @param string    $filename    the name of htgroup file
    */
    function setFHtgroup($filename){
        $this->fHtgroup=$filename;
    }
   
    /**
    * Sets the filename and path of the password file for the htaccess file
    * @param string    $filename    the name of htgroup file
    */
    function setFPasswd($filename){
        $this->fPasswd=$filename;
    }

    /**
    * Adds a user to the password file
    * @param string $username    Username
    * @param string $password    Password for Username
    * @param string $group        Groupname for User (optional)
    * @return boolean $created        Returns true if user have been created otherwise false
    */
    function addUser($username,$password,$group){
        // checking if user already exists
        $file=@fopen($this->fPasswd,"r");
        $isAlready=false;
        while($line=@fgets($file,200)){
            $lineArr=explode(":",$line);
            if($username==$lineArr[0]){
                $isAlready=true;
            }
        }
       
        if($isAlready==false){
            $file=fopen($this->fPasswd,"a");

            $password=crypt($password);
            $newLine=$username.":".$password."\n";

            fputs($file,$newLine);
            fclose($file);
            return true;
        }else{
            return false;
        }
    }

    /**
    * Adds a group to the htgroup file
    * @param string $groupname    Groupname
    */
    function addGroup($groupname){
        $file=fopen($this->fHtgroup,"a");
        fclose($file);
    }

    /**
    * Deletes a user in the password file
    * @param string $username    Username to delete
    * @return boolean $deleted    Returns true if user have been deleted otherwise false
    */
    function delUser($username){
        // Reading names from file
        $file=fopen($path.$this->fPasswd,"r");
        $i=0;
        while($line=fgets($file,200)){
            $lineArr=explode(":",$line);
            if($username!=$lineArr[0]){
                $newUserlist[$i][0]=$lineArr[0];
                $newUserlist[$i][1]=$lineArr[1];
                $i++;
            }else{
                $deleted=true;
            }
        }
        fclose($file);

        // Writing names back to file (without the user to delete)
        $file=fopen($path.$this->fPasswd,"w");
        for($i=0;$i<count($newUserlist);$i++){
            fputs($file,$newUserlist[$i][0].":".$newUserlist[$i][1]."\n");
        }
        fclose($file);
       
        if($deleted==true){
            return true;
        }else{
            return false;
        }
    }
   
    /**
    * Returns an array of all users in a password file
    * @return array $users        All usernames of a password file in an array
    * @see setFPasswd()
    */
    function getUsers(){
    }
   
    /**
    * Sets a password to the given username
    * @param string $username    The name of the User for changing password
    * @param string $password    New Password for the User
    * @return boolean $isSet      Returns true if password have been set
    */   
    function setPasswd($username,$new_password){
        // Reading names from file
        $newUserlist="";
       
        $file=fopen($this->fPasswd,"r");
        $x=0;
        for($i=0;$line=fgets($file,200);$i++){
            $lineArr=explode(":",$line);
            if($username!=$lineArr[0] && $lineArr[0]!="" && $lineArr[1]!=""){
                $newUserlist[$i][0]=$lineArr[0];
                $newUserlist[$i][1]=$lineArr[1];
                $x++;
            }else if($lineArr[0]!="" && $lineArr[1]!=""){
                $newUserlist[$i][0]=$lineArr[0];
                $newUserlist[$i][1]=crypt($new_password)."\n";
                $isSet=true;
                $x++;
            }
        }
        fclose($file);

        unlink($this->fPasswd);

        /// Writing names back to file (with new password)
        $file=fopen($this->fPasswd,"w");
        for($i=0;$i<count($newUserlist);$i++){
            $content=$newUserlist[$i][0].":".$newUserlist[$i][1];
            fputs($file,$content);
        }
        fclose($file);

        if($isSet==true){
            return true;
        }else{
            return false;
        }
    }

    /**
    * Sets the Authentification type for Login
    * @param string $authtype    Authentification type as string
    */
    function setAuthType($authtype){
        $this->authType=$authtype;
    }

    /**
    * Sets the Authentification Name (Name of the login area)
    * @param string $authname    Name of the login area
      */
    function setAuthName($authname){
        $this->authName=$authname;
    }

    /**
    * Writes the htaccess file to the given Directory and protects it
    * @see setFhtaccess()
      */
    function addLogin(){
      $file=fopen($this->fHtaccess,"w+");
      fputs($file,"Order allow,deny\n");
      fputs($file,"Allow from all\n");
      fputs($file,"AuthType        ".$this->authType."\n");
      fputs($file,"AuthUserFile    ".$this->fPasswd."\n\n");
      fputs($file,"AuthName        \"".$this->authName."\"\n");
      fputs($file,"require valid-user\n");
      fclose($file);
    }

    /**
    * Deletes the protection of the given directory
    * @see setFhtaccess()
    */
    function delLogin(){
        unlink($this->fHtaccess);
    }
}
?>
Avatar billede straszek Praktikant
22. oktober 2006 - 12:19 #10
koden er jo en class så du skal lave en include i dit script

mitscript.php
<?
include("passclass.php");

for at tilføje et brugernavn og password til din password fil skriver du

$ht = new htaccess();
$ht->addUser(mitbrugernavn, mitpassword,$group);

$group kan du bare lade stå

Husk at password filen skal chmod'es til 777
Avatar billede internet Nybegynder
22. oktober 2006 - 12:41 #11
Sorry, men hvor skal jeg includere dette script, som du skrev?

<?
include("passclass.php");

for at tilføje et brugernavn og password til din password fil skriver du

$ht = new htaccess();
$ht->addUser(mitbrugernavn, mitpassword,$group);
Avatar billede straszek Praktikant
22. oktober 2006 - 12:52 #12
du skal includere passclass.php i det script/kode du bruger til at at oprette brugere i dit system
Avatar billede internet Nybegynder
22. oktober 2006 - 13:11 #13
min .htaccess ser sådan ud:

AuthType    basic
AuthName    "Secured area"
AuthUserFile    /hsphere/local/home/.htmaster/.ok_user
Require    valid-user

Er det her at jeg skal includere koden?
Avatar billede straszek Praktikant
22. oktober 2006 - 13:48 #14
Nej. Du har vel? - et stykke kode du bruger til at oprette brugere - det er her du skal includrere passclass.php
Avatar billede internet Nybegynder
22. oktober 2006 - 13:51 #15
Nej, jeg har desværre ikke.

Jeg har tidligere brugt webcafe.dk's password og brugernavn generator, og den side er jo lukket.
Avatar billede internet Nybegynder
27. marts 2010 - 11:59 #16
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester