htaccess mit php erstellen

Sevenger

Grünschnabel
Ich möchte gerne eine .htaccess und eine .htpasswd mit php erstellen.
Die Dateien werden soweit auch erstellt.
Wenn ich mich aber einloggen will, dann kommt, wenn ich das korrekte Passwort eingebe folgende Fehlermeldung:

403 Forbidden
You don't have permission to access /bilder/13/ on this server

skript.php
Code:
    // htaccess Verzeichnisschutz erstellen
    
    	$DOCUMENT_ROOT = "/www/htdocs/sevengab/bilder/";
	$updir = $picid;
	$username = $name;
	$authname = upload;
	$password = upload;
    
    // htaccess Datei erstellen
    
    	$htaccess = fopen("$DOCUMENT_ROOT"."$updir/.htaccess", "w");
	fputs($htaccess, 
             "AuthType Basic\n".
             "AuthName \"$authname\"\n".
            "AuthUserFile $DOCUMENT_ROOT"."$updir/.htpasswd\n".
             "require valid-user\n"
           );
	fclose($htaccess);
	
    
    // htpasswd Datei erstellen
    
    	$htpasswd = fopen("$DOCUMENT_ROOT"."$updir/.htpasswd", "w");
	$password = crypt($password);
	fputs ($htpasswd, "$username:$password\n");
	fclose ($htpasswd);
    
    // htaccess Verzeichnisschutz Ende

Folgende beiden Dateien wurden vom Skript erstellt:

.htaccess
Code:
AuthType Basic
AuthName "upload"
AuthUserFile /www/htdocs/sevengab/bilder/13/.htpasswd
require valid-user

htpasswd
Code:
admin:$1$DyDC32ka$86.kq.hlRlgTOoYbSroUf0

Hat irgendjemand ne Idee, wo sich hier der Fehlerteufel eingeschlichen hat?

so long
Sevenger
 
OK, dann solltest Du überprüfen ob in der httpd.conf (sofern Du apache verwendest) folgendes Steht:

Code:
# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
AllowOverride AuthConfig

Deine .htaccess und die pwd-datei sollten eigentlich in Ordnung sein.
 
Dein Problem liegt am salt der crypt Funktion.
Denn htaccess verschlüsselt die Passwörter folgendermaßen:
PHP:
$ht_pass = crypt($pass,substr($pass,0,2));
(Quelle: Kommentare der Funktion crypt)
Also sollte bei dir die Zeile so aussehen:
PHP:
$password = crypt($password, substr($password, 0, 2));
 
Original geschrieben von hohoho
Dein Problem liegt am salt der crypt Funktion.
Denn htaccess verschlüsselt die Passwörter folgendermaßen:
PHP:
$ht_pass = crypt($pass,substr($pass,0,2));


Das geht leider auch nicht. :(

hier mein Code dazu, was nich geht:


PHP:
 <?php
	$ordner = test;
	$username = "user";
	$authname = upload;
	$password = "upload";

$htaccess = fopen("$ordner/.htaccess", "w");
	fputs($htaccess, 
             "AuthType Basic\n".
             "AuthName \"$authname\"\n".
            "AuthUserFile \".htpasswd\n".
             "require valid-user\n"
           );
	fclose($htaccess);
	
    
    // htpasswd Datei erstellen
    
    	$htpasswd = fopen("$ordner/.htpasswd", "w");
	$pass = crypt($password, substr($password, 0, 2));


	$pwf .= $username.":".$pass."\n";	

	fputs ($htpasswd, $pwf);
	fclose ($htpasswd);

?>

beide Dateien werden erstellt, nur das Pass stimmt dann nicht.

Hat jemand einen Rat?
 
Versuchs mal hiermit:
<?
echo "user:";
$chars = array_merge(range('a','z'),range('A','Z'),range(0,9));
$newpass = 'pass';
for($i=0;$i<2;$i++) { $salt .= $chars[mt_rand(0,count($chars)-1)]; }
echo crypt($newpass,$salt);
?>
 
Hab das Script gerade eben entdeckt, da ich auch meine htaccess Verwaltung über PHP machen will !

Leider klappt das Script immer noch nicht, aber gibt es mittlerweile andere Lösungen oder diese Verbessert wo das ganze auch klappt ?
 
PHP:
function make_htaccess($user, $authName, $passwdFile="")
{
    
    if(empty($passwdFile))
        $passwdFile=dirname(__FILE__);
    
    $access .=    'AuthType Basic' . "\n";
    $access .=    'AuthName "' . $authName . '"' . "\n";
    $access .=    'AuthUserFile ' . $passwdFile . '/.htpasswd' . "\n";
    $access .=    'require user ' . $user . "\n";
    
    $handle = fopen(".htaccess","w");
    fputs($handle,$access);
    fclose($handle);

}


function make_htpasswd($user, $passwd, $passwdFile="")
{
    
    if(empty($passwdFile))
        $passwdFile=dirname(__FILE__);
        
    $passwd = crypt($passwd);
    $htpasswd = $user . ':' . $passwd . "\n";
    
    $handle = fopen($passwdFile . '/.htpasswd',"a");
    fputs($handle,$htpasswd);
    fclose($handle);
    
}

// Den Benutzernamen für den Login
$user = 'Damir';

// Das Passwort für den Login
$passwd = 'meinPasswort';

// Der Text, der angezeigt wird wenn das Login-Fenster geöffnet wird.
$authName = 'Meine geschütztes Verzeichnis';

//Den kompletten Pfad zu der Datei .htpasswd, ohne abschließenden Slash (/)
$passwdFile = '';


make_htaccess($user, $authName, $passwdFile);
make_htpasswd($user, $passwd, $passwdFile);

// unlink("crypt.php");

Quelle: self-php
 
Zurück