• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

passwortschutz für include-seiten

Status
Für weitere Antworten geschlossen.

P51D

Mitglied
hallo

Ich möchte einen kleinen, einfachen Passwortschutz für ein paar Seiten meiner Homepage einrichten, doch bis jetzt hat nicht wirklich etwas funktioniert.
Ich habs schon mit .htaccess und .htpasswd probiert, aber es waren immer Fehlermeldungen dabei.

Jetzt habe ich etwas neues gefunden:
wer-weiss-was | "simpler Passwortschutz mit PHP" | aus Forum PHP
Code:
<?
$admin_login = "test";
$admin_passwort = "test";
function no_authentification(){
    Header ("WWW-authenticate: basic realm=\"Administration\"");
    Header ("HTTP/1.0 401 Unauthorized");
    echo ("Sie benötigen Benutzername und Kennwort zum Zugriff.");
    exit;
}
if (!isset($PHP_AUTH_USER)){
    no_authentification();
}
else{
    if($PHP_AUTH_USER != $admin_login || $PHP_AUTH_PW != $admin_passwort){
        no_authentification();
    }
}
?>
Doch leider musste ich feststellen, dass dies auch nicht so funktioniert wie geweünscht:
1) Jedesmahl, selbst wenn ich den richtigen Username und Passwort eingegeben habe, kommt wieder das Login fenster. Selbst als ich es anders versucht habe:
Code:
if($PHP_AUTH_USER != test || $PHP_AUTH_PW != test){
Was mache ich falsch? So wie ich das sehe, wurde beidemahle, selbst wenn die Angaben stimmen die Funktion no_authentification() ausgeführt. Was muss ich anstelle des Befehls schreiben, so dass er den nachfolgenden Text zulässt?

2) Die Seite ist über ein Template aufgebaut, und weitere Unterseiten werden über einen include() Befehl hinzugefühgt. Wenn ich jetzt den obigen Code zu oberst in eine der zu schützenden Seiten kopiere, kommt eine Fehlermeldung, dass die Header-Informationen abgeschlossen sind, oder so ähnlich
Code:
[B]Warning[/B]: Cannot modify header information - headers already sent by (output started at C:\Daten\...\hhome.php:12) in [B]C:\Daten\.....\unterseiten\dirigent.php[/B] on line [B]5[/B]

[B]Warning[/B]: Cannot modify header information - headers already sent by (output started at C:\Daten\....\hhome.php:12) in [B]C:\Daten\....\unterseiten\dirigent.php[/B] on line [B]6[/B]
Sie benötigen Benutzername und Kennwort zum Zugriff.
Wie kann ich diese Fehler beheben, so dass es möglichst einfach ist, aber dennoch irgendwie in die Seiten von "unterseiten" die ich schützen will integrieren kann?

Ich hoffe, dass ich mir helfen könnt.

MFG

P51D

das Passwort und der benutzername werden dann nicht im gleichen File stehen...
 
Das mit dem "headers already sent" heißt, dass Du irgendwp HTTP-Header sendest, obwohl Du schon Ausgaben in die zu erstellende Seite gemacht hast. Ein Befehl "header()" darf nur ausgeführt werden, wenn vorher noch ein Output gemacht wurde. Auch kein DOCTYPE oder ähnliches.

Ich würde Passwortschutz generell mit htaccess machen. Das ist am einfachsten und sicher.
 
kann ich htacces dateien auch in einem verzeichniss "unterseiten" einbinden, und dann sagen, dass es nur bestimmte Seiten aus dem Verzeichniss schützen soll?

mit dem head Befehl meinst du, dass auch, wenn in dem HTML Template <head> Alles CSS-Files einbinden, bodydefines </head>
nachträglich können dann auch keine weiteren php-Befehle, die dann aus einer Include-Seite aufgerufen werden, ausgeführt werden?
Ist das richtig?
 
nein er meint,
dass du vor dem Header(...) Befehl (<head> aus html ist kein Befehl) kein Ausgabe machen darfst.
Falsch wäre zum Beispiel
PHP:
<?php
echo "Irgenwas...";
header(...);
?>
Bei http wird bevor eine Webseite/Datei/sonstirgenwas gesendet wird, immer ein Header mit weitern Informationen gesendet. Dieser Header muss immer als erstes kommen.
Hypertext Transfer Protocol – Wikipedia
Gruß KY
 
ok, habs verstanden

Nur ist mein Problem, dass ich den Bereich für die includes() nicht zu oberst im HTML File habe. Soll heissen:

Code:
¨<?php include("counter.php"); ?>



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head>

<!-- ************************** Externe Dateien einbinden ************************************** -->
<link rel="stylesheet" href="ddlevelsfiles/style.css" type="text/css">
<link rel="stylesheet" type="text/css" href="ddlevelsfiles/menus.css">
<script type="text/javascript" src="ddlevelsfiles/ddlevelsmenu.js">
</script>
</style>
</head>

Hier ist noch anderer Code

<body>
<div id="inhalt_mitte">                                                                    
<!-- Als Startseite hhome.php und dann werden die Seiten mit der Variable page im Server_Root Verzeichniss/unterseiten gesucht -->
    <?php 
        if(!isset($_GET['page'])){                                                                
               include("./unterseiten/h_home.php");
        }
        else{
              include($_SERVER["DOCUMENT_ROOT"]."/harmonie/unterseiten/".$_GET["page"].".php");
        }  
    ?>                
</div>
</body>


So kann ich jetzt natürlich, wenn in den includes der php-Befehl zu oberst ist, diesen nicht ausführen?
Oder kann ich einfach die header() im passwortschutz-Code entfernen, was theoretisch nicht gehen sollte?

MFG
P51D
 
ich habe jetzt die ganze sache mit mehreren
HTTP Authentification's ausprobert, doch das Resultat war das selbe:

Selbst bei korrektem Login wird die Abfrage erneut geöffnet, und nicht wie es sollte die enthaltenen Dateien.

Kann es sein, dass XAMPP Apache das nicht unterstützt?
 
kann ich htacces dateien auch in einem verzeichniss "unterseiten" einbinden, und dann sagen, dass es nur bestimmte Seiten aus dem Verzeichniss schützen soll?

Am Besten schützt du deine include Dateien, wie schon die Vorposter erwähnt haben, mit .htaccess.
Du machst es dir viel zu kompliziert. Die Daten müssen in erster Linie topsicher "verstaut" sein und das macht man am Besten mit ner .htaccess im jeweiligen Ordner.
.htaccess anlegen mit

Code:
order deny,allow
deny from all
und rein in dein include Verzeichnis.

Somit ist ein Zugriff von Aussen auf den Inhalt der include Dateien nicht mehr möglich.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben