[tutorial] per .htaccess verzeichnis schützen (für linux und windows)

Dieses Thema im Forum "Webentwicklung" wurde erstellt von onip, 26. Juni 2006 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 26. Juni 2006
    hallo zusammen,

    ich hab mal ein kleines php cödechen geschrieben,
    das euch dabei helfen soll online-verzeichnisse (geht auch für localhost) vor fremden zugriff zu schützen.

    eine kleine bitte habe ich.
    zum einen würde ich mich über eine psitive resonaz freuen (bewertung), zum anderen würde ich mich rießig freuen, wenn die coder unter euch mir bescheid geben, falls der code geändert/verbessert wird.
    e-mail steht ausgeklammert im script.

    ich wünsch euch viel spass damit.

    onip

    [HIDE]
    doto:
    1.) kopiert euch den code und fügt es in ein *.php dokument ein. die benennung ist egal.
    2.) bewerten ;)

    PHP:
    <?
    //
    // kleine info
    //
    // das script hab ich in eigener regie geschrieben.
    // ich hab es lokal auf windows und online auf linux getestet.
    // das script kann gerne weiter entwickelt werden,
    // aber ich bitte um mitteilung und übersendung des quellcodes unter:
    //
    // onip@gmx.net
    //
    // danke
    //
    //
    // was macht das script
    //
    // es soll ledeglich ein webverzeichnis (linux oder windows) per .htaccess geschützt werden.
    // dazu werden 3 dateien erzeugt
    //
    // 1. .htaccess (wichtig)
    // 2. .htpasswd01 (wichtig)
    // 3. system.php (unwichtig)
    //
    //
    // wie ist der ablauf
    //
    // die datei wird in einen verzeichnis kopiert und aufgerufen.
    // das formular muß komplett ausgefüllt werden um speichern zu können.
    // wichtig dabei ist das betriebsystem.
    // man muß wissen um welches system es sich handelt, damit später die .htaccess abfrage funktioniert.
    // windows kann nicht crypten, daher wir in .htpasswd01 das passwort in klartext drinstehen.
    // in system.php wird nortiert um welches betriebsystem es sich handelt.
    // system.php ist nur für das formular und kann gelöscht werden, wenn erwünscht.
    //
    // fertig ;)
    //
    //
    // sicherheit
    //
    // vergesst nicht die datei wieder zu löschen, um ein missbrauch zu vermeiden.
    // ein verzeichnis was per .htaccess gesichert wurde, ist sehr sicher.
    //
    //
    // schlusswort
    //
    // denkt an mich, wenn ihr das script nutzt.
    //
    //
    // ende
    //

    //
    // hier kann konfiguriert werden
    //
    // um welches system handelt sichs (Linux oder Windows), das wird in diesem dokument festgehlten
    $systemfile  "system.php" ;
    // array für systemauswahl
    $ftpsystemAr  = array ( "Linux (Standart)" "Windows" );
    // was soll in der passwortauforderung stehen
    $passtext  ".: htaccess-passwort by onip :." ;
    // error texte
    $noadmin  "Verzeichnis ist nicht gesichert!" ;
    $noinput  "Da fehlt doch was?!" ;
    $nopwd  "Passwort stimmt nicht überein!" ;
    $fertig  "Verzeichnis wurde gesichert." ;

    //
    // ab hier nur was für programmierer
    //
    // dokument lesen
    function  readthisfile  ( $pfad ){
        if (
    file_exists  ( $pfad )){
            
    $fp  fopen $pfad "r"  );
            while ( ! 
    feof $fp  ) ){
                
    $zeile  .=  fgets $fp 1024  );
            }
            
    fclose ( $fp );
            return 
    $zeile ;
        }
    }

    // dokument schreiben
    function  writethisfile  ( $pfad , $string ){
        
    $fp = fopen ( $pfad , "w+" );
        
    fputs ( $fp , $string );
        
    fclose ( $fp );
    }

    // speichern
    if(isset ( $_POST [ "savehtaccess" ])){
        
    // wurde alles korrekt ausgefüllt
        
    if ( $_POST [ "name" ] ==  ""  ||  $_POST [ "name" ] ==  " "  ||  $_POST [ "pwd1" ] ==  ""  ||  $_POST [ "pwd2" ] ==  "" ){
            
    $error  $noinput ;
        }else {
            
    // ja, dann check mal das passwort, ob pwd1 und pwd2 übereinstimmen
            
    if ( $_POST [ "pwd1" ] ==  $_POST [ "pwd2" ]) {
                
    // um welches system handelt es sich
                
    if ( $_POST [ "system" ] ==  $ftpsystemAr [ 1 ]){
                    
    // windows kann nicht crypten
                    
    $passwd  $_POST [ "pwd2" ];
                }else{
                    
    // linux cryptet
                    
    $passwd  crypt ( $_POST [ "pwd2" ], substr ( $_POST [ "pwd2" ], 0 , 2 ));
                }
                
    // speichern des systems ins dokument
                
    writethisfile  ( "./" . $systemfile , $_POST [ "system" ]);
                
    // was soll gespeichert werden (string für .htpasswd01)
                
    $inhalt  $_POST [ "name" ]. ":" . $passwd ;
                
    writethisfile  ( "./.htpasswd01" , $inhalt );
                
    // wie ist der pfad zu .htpasswd01
                
    $path  $_SERVER [ 'SCRIPT_FILENAME' ];
                
    // filename soll nicht gespeichert werden (pfadangabe reicht)
                
    $filename  substr  ( strrchr ( $_SERVER [ 'SCRIPT_FILENAME' ], "/" ), 1 );
                
    $path  ereg_replace ( $filename '' $path );
                
    // was soll gespeicherten (string für .htaccess)
                
    $htaccessinhalt  "AuthType Basic\nAuthName \"" . $passtext . "\"\nAuthUserFile " . $path . ".htpasswd01\nrequire valid-user" ;
                
    writethisfile  ( "./.htaccess" , $htaccessinhalt );
                
    // fertig
                
    $error  $fertig ;
            }else{
                
    // passwort stimmt nicht überein
                
    $error  $nopwd ;
            }
        }
    }
    // wurde das verzeichnis schon geschützt
    if(! file_exists  ( "./.htaccess" ) && !isset ( $_POST [ "savehtaccess" ])){
        
    // nein, weil die datei (.htaccess) nicht existiert
        
    $error  $noadmin ;
    }else{
        
    // ja, dann lese
        
    list ( $name , $pwd1 ) =  explode  ( ":" readthisfile  ( "./.htpasswd01" ));
        
    $pwd2  $pwd1 ;
        
    $usesystem  readthisfile  ( $systemfile );
    }

    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
        <title><?  echo  $passtext ?></title>
        <style type="text/css">
        body {
            background-color: #000;
            font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
            color: #FFF;
        }
        .font1, .error {
            font-size: 12px;
        }
        .error {
            color: #FF0000;
        }
        .tball {
            border: 2px solid #FFF;
            padding: 4;
        }
        .tdnavpos {
            border-bottom: 2px solid #FFF;
        }
        .select, .input {
            width: 200px;
        }
    </style>
    </head>

    <body>
    <form method="post" action="">
        <table width="400" border="0" cellspacing="0" cellpadding="0" align="center" class="tball">
            <tr>
                <td colspan="2" class="tdnavpos" align="center"><span class="error"><strong><?  echo  $error ?></strong></span></td>
            </tr>
            <tr>
                <td align="right" class="tdnavpos"><span class="font1"><strong>Betriebssystem: </strong></span></td>
                <td class="tdnavpos"><select name="system" class="select"><?
                
    for ( $i = 0 $i < count ( $ftpsystemAr );  $i ++){
                    if (
    $ftpsystemAr [ $i ] ==  $usesystem  ||  $ftpsystemAr [ $i ] ==  $_POST [ "system" ]){
                        
    $selected  " selected" ;
                    }else{
                        
    $selected  "" ;
                    }
                    echo 
    "<option value=\"" . $ftpsystemAr [ $i ]. "\"" . $selected . ">" . $ftpsystemAr [ $i ]. "</option>" ;
                }
                
    ?></select></td>
            </tr>
            <tr>
                <td align="right" class="tdnavpos"><span class="font1"><strong>Benutzername: </strong></span></td>
                <td class="tdnavpos"><input type="text" name="name" value="<?  if (! $_POST [ "name" ]){echo  $name ;}else{echo  $_POST [ "name" ];}  ?>" class="input"></td>
            </tr>
            <tr>
                <td align="right" class="tdnavpos"><span class="font1"><strong>Passwort: </strong></span></td>
                <td class="tdnavpos"><input type="password" name="pwd1" value="<?  if (! $_POST [ "pwd1" ]){echo  $pwd1 ;}else{echo  $_POST [ "pwd1" ];}  ?>" class="input"></td>
            </tr>
            <tr>
                <td align="right" class="tdnavpos"><span class="font1"><strong>Passwort bestätigen: </strong></span></td>
                <td class="tdnavpos"><input type="password" name="pwd2" value="<?  if (! $_POST [ "pwd2" ]){echo  $pwd2 ;}else{echo  $_POST [ "pwd2" ];}  ?>" class="input"></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit" name="savehtaccess" value="speichern" class="submit"></td>
            </tr>
        </table>
    </form>
    </body>
    </html>
    [/HIDE]
     

  2. Anzeige
  3. #2 26. Juni 2006
    Hmm ich versteh noch nicht so ganz den Sinn von diesem Script. Es ist ne PHP Datei mit der man einen .htaccess-Schutz erstellen kann?
    Ob ich das jetzt alles in dein Forular eingebe oder selbst die .htaccess schreibe wird wohl von der Arbeit her das gleiche sein, nur das ich mir den Inhalt der .htaccess eigentlich direkt ausm INet kopieren kann, bissel modifizieren und speichern. Das müsste eigentlich noch jeder hinkriegen.

    Fazit: Dein Programm ist für Leute gut, die zu faul sind um bei Google 1 Minute zu suchen ;)
     
  4. #3 26. Juni 2006
    naja, damit hast du sicher recht, aber wie schreibst du ein crypt in .htpasswd?
    dafür solltest du auch ein script parat hab der das für dich macht.

    oder weißt du wie "italienwirdweltmeister" gecryptet ist?

    // edit
    italienwirdweltmeister = itmPRgpzu2XhY
     
  5. #4 26. Juni 2006
    Der gleiche Klartext wird aber doch unterschiedlich gecryptet oder?
    HIER wird dein Plaintext zb zu iBVbpBSP7Yot2 oder sk6nttNQZLQjY (um nur ein paar zu nennen)
    Also zum Crypten der Passwörter gibt es auch wieder 1000Seiten, die man alle bei Google findet ;)

    Aber gut. Bei deinem Programm hat man eben alles aufeinmal.
     

  6. Videos zum Thema
Die Seite wird geladen...
Similar Threads - tutorial per htaccess
  1. Antworten:
    0
    Aufrufe:
    520
  2. Antworten:
    4
    Aufrufe:
    1.159
  3. Antworten:
    12
    Aufrufe:
    948
  4. Antworten:
    0
    Aufrufe:
    451
  5. [Artwork] Tutorial Alles Super

    Flund , 4. Januar 2010 , im Forum: GFX-Showroom
    Antworten:
    4
    Aufrufe:
    755