Problem bei einem Script zum auslesen von Dateien aus einem Order

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem bei einem Script zum auslesen von Dateien aus einem Order

    Hallo

    Momentan schreibe ich an einem Script, welches folgendes leisten soll:

    Aus einer vorhandenen Select-Box wählt man einen Jahrgang aus (momentan bestätigt man die Auswahl noch per Button, später dann per onclick).
    Der Wert des gewählten Jahres (z. Bsp. "2010") läuft durch 2 Programmschleifen.
    Diese öffnen einen auf der Festplatte liegenden Ordner selben Namens ("2010") und lesen die Namen der darin enthaltenen Unterordner ein und schreiben sie als Optionen in eine 2 Select-Box (diese wird direkt per PHP generiert).
    Aus dieser 2 Select-Box wählt man wieder einen Punkt (Bsp.: "Mumpitz") aus (ein Thema).
    Der ausgewählte Wert ist wiederrum ein Name einer der oben genannten Unterordner.
    Dieser Unterordner ("Mumpitz") soll geöffnet werden und die darin enthaltenen ca. 10 Bilder sollen auf der Webseite angezeigt werden.

    ---------------------------------------

    Folgende 2 Probleme habe ich:

    Zum einen kann ich derzeit das Php-Scxrupt nur auf dem Server weiterentwickeln, da in
    HTML Code:
    <form name='form_1' action='$PHP_SELF' method='_self'>
    die Methode _self nicht auf meinem lokalen Apache funktioniert.
    Mein lokaler Server ist folgender: [COLOR="Red"]WampServer Version 2.1
    Created by Romain Bourdon [/COLOR]

    Das zweite Problem ist schwerwiegender: Sobald ich die Auswahl der 2. Select-Box per Form - Button abschicke, vergisst er den gespeicherten Wert der zuvor aus der 1. Select - Box ausgewählt wurde, der ist aber noch wichtig.

    Ich hoffe die Beschreibung ist nicht zu langatmig, aber ich wollte es verständlich machen.

    Ich hoffe jemand kann mir bei den beiden Problemen weiterhelfen.


    Mit freundlichen Grüßen

    david2


    Hier das Script:

    PHP Code:
    <?
    session_start();
    ?>

    ...

    <HTML>

    ...

    <?php
    error_reporting
    (0);  
    $ordner=$_SESSION['xordner'];
    $uordner=$_SESSION['xuordner'];
    $thema=$_SESSION['xthema'];

    global 
    $handle;
    //global $PHP_SELF;
    //global $jahr;
    //global $xjahr;

    //phpinfo();



    $ordner=$jahr;

    /* Mit bestem Dank an Torben Brodt (auf http://www.easy-coding.de)*/

            
    $content "";

               foreach(
    scandir($ordner) as $file) {
                    if(
    $file[0] != '.') { // Versteckte Dateien nicht anzeigen
                            
    if(is_dir($ordner.'/'.$file)) {
                                    
    $folderArray[] = $file;
                            } else {
                                    
    $fileArray[] = $file;
                            }
                    }
            }



            
    // Erst die Ordner ausgeben
            
    if(isset($folderArray)) {
                    foreach(
    $folderArray as $row) {
                            
    $content .= '<b>'.$row.'</b><br />';
                            
    $content .= '<div style="padding-left:10px;color:#afafaf" />'//Unterordner nach Rechts einrücken
                           // $dateien .= $ordner.'/'.$row; // rekursive Funktion
                            
    $content .= '</div>';
                    }
            }

            
    // ...dann die Dateien ausgeben
          /*  if(isset($fileArray)) {
                    foreach($fileArray as $row) {
                            $content .= '<a href="'.$ordner.'/'.$row.'">'.$row.'</a><br />'; //Dateien verlinken
                    }
            }*/

    // Rekursion ende


    //$uordner=$thema;
    $uordner=$_POST['thema'];

    //echo "OPQ:$ordner"+"$uordner";

    // Mit den folgenden Zeilen lassen sich alle Dateien in einem Verzeichnis auslesen
    echo "t1: $_POST[thema]";

    echo 
    "hund<br>";
    echo 
    "ord+uo: $ordner/$uordner";
    echo 
    "<br>katze";
    //$handle='';
    $handle=opendir ($ordner."/".$_POST['thema']);
    //echo "<br>handle:$handle<br>";

    while ($datei readdir ($handle)) 
        {
        echo 
    "$datei<br>";
        }

    closedir($handle);

    //echo "t: $thema";
    echo "t2: $_POST[thema]";

    $_SESSION['xordner']=$ordner;
    $_SESSION['xuordner']=$uordner;

    //------------------------------------
    //---- Ausgabe der Listboxen --------- //

    echo "
    <form name='form_1' action='
    $PHP_SELF' method='_self'> 

    <table border='0' align='center' width='90%'>
        <tr>
            <td align='center'><font face='Arial' size='2'>1. Bitte wählen Sie einen Jahrgang aus:<br><br>
                <select name='jahr'> <!-- class='forminput-mediathek' onchange='MM_jumpMenu('parent.frames[\'mainframe\']',this,1)'> -->
                    <option selected></option>
                    <option>2012</option>
                    <option>2011</option>
                    <option>2010</option>
                    <option>2009</option>
                    <option>2008</option>
                  </select>
                    <input type='submit' name='Submit' value='Submit'>
                    <input type='reset' name='Reset' value='Reset'>
                <br />
            </font></td>
            <td width='100px' align='center'><span class='extra'>===></span><br /></td>
            <td align='center'><font face='Arial' size='2'>2. Bitte wählen Sie jetzt ein Thema aus:<br><br> 

        </form>
    "
    ;


    echo 
    "
    <form name='form_2' action='
    $PHP_SELF' method='POST'> 

     <select name='thema'>\n"
    ;

       foreach(
    $folderArray AS $name)
       {
       echo 
    "<option>".$name."</option><br>";
       }
    echo 
    "</select>\n";
    echo 
    "<input type='submit' name='Submit' value='Submit'>";
    echo 
    "<input type='reset' name='Reset' value='Reset'>";
    echo 
    "</form><br> </font> </td> </tr> </table>";

    echo 
    "Thema: $thema";

    $_SESSION['thema']=$thema;

    ?>

  • #2
    Originally posted by david2 View Post
    Zum einen kann ich derzeit das Php-Scxrupt nur auf dem Server weiterentwickeln, da in
    HTML Code:
    <form name='form_1' action='$PHP_SELF' method='_self'>
    die Methode _self nicht auf meinem lokalen Apache funktioniert.
    PHP Code:
    $_SERVER['PHP_SELF']; 
    Originally posted by david2 View Post
    Das zweite Problem ist schwerwiegender: Sobald ich die Auswahl der 2. Select-Box per Form - Button abschicke, vergisst er den gespeicherten Wert der zuvor aus der 1. Select - Box ausgewählt wurde, der ist aber noch wichtig.
    Verschwinden die Select-Boxen, nach man dort eine Auswahl getroffen hat? Tipp: speicher die Werte in einer Session ab.

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Comment


    • #3
      Hallo

      Danke für die Antwort.

      Zu meinem Verständnis, muss ich eine dumme Frage stellen.
      Ist das so gemeint:
      HTML Code:
      <form name='form_1' action='$_SERVER['PHP_SELF']' method='_self'>
      ?

      Damit ich nicht als Trottel dastehe: ich weiß was es mit $_SERVER['PHP_SELF'] auf sich hat, diese Variable enthält den Namen des derzeit laufenden Scriptes / PHP-Datei.

      Ich gebe zu, ich programmiere wenig PHP, aber die Grundlagen kenne ich, bin also kein Anfänger mehr.

      Die Select - Boxen verschwinden nicht.

      Ich habe an bestimmten Punkten ein Echo eingebaut um zu erkennen, bis wo die Variable noch ihren Inhalt hat. Und nach dem Bestätigen der 2. Select-Box steht dann nur noch der Wert aus ebendieser 2. Box da.

      Nach jedem Abschicken einer der beiden <form> wird das Script ja wieder erneut durchlaufen und dabei wird der Inhalt der 1. Variable vergessen.
      Ich habe die Werte schon in session-Variablen gespeichert und trotzdem wird der Inhalt der Variablen vergessen.

      Mit freundlichen Grüßen

      david2
      Last edited by david2; 05-04-2012, 15:22.

      Comment


      • #4
        Pack die select-Elemente in ein Formular, dann hast auch alle benötigten Daten.

        Peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Comment


        • #5
          action='$_SERVER['PHP_SELF']'
          1. PHP_SELF ist böse, weil es XSS Attaken ermöglichen kann
          2. da sind Anführungszeichen zu viel.

          die Methode _self nicht auf meinem lokalen Apache funktioniert.
          _self ist keine Methode.
          Da steht dir nur POST und GET zur Verfühgung.
          Wir werden alle sterben

          Comment


          • #6
            Optionen

            Ich baue meine optionfelder mit einer funktion auf, welche das selected=selected selbständig zuweist bzw. erhält. (für jede Zeile einmal aufrufen, wobei postfeld deine Variable enthält)

            PHP Code:
            function optionaufbereiten($feld,$postfeld,$anzeige) {
                
            $sel '';
                if (
            $feld == $postfeld){ 
                    
            $sel ' selected="selected"';
                }
                echo 
            '<option ' $sel 'value="'$feld .'">'.$anzeige .'</option>';

            Hoffe es hilft
            Gruss Markus

            Comment


            • #7
              Originally posted by combie View Post
              1. PHP_SELF ist böse, weil es XSS Attaken ermöglichen kann
              Why? Es enthält nur den Pfad der aktuellen Datei, relativ zum Docroot. Man kann das Formziel auch ganz leicht clientseitig manipulieren. Das kann kein Grund sein, $_SERVER['PHP_SELF'] nicht zu benutzen.

              Comment


              • #8
                Du musst MIR nicht glauben.
                Solltest du aber....

                Und gegen prüfen kostet dich nichts.
                Google: "php_self xss"
                Wir werden alle sterben

                Comment


                • #9
                  Gut, das Problem liegt aber nicht bei PHP, sondern beim Apache. Nginx (und Lighttpd afaik auch, hab ich aber nicht getestet) gibt einen 404er, wenn man versucht, eine Datei als Pfad aufzurufen (siehe Screenshot).


                  Bei Apache kann man sich mit einer einfachen .htaccess behelfen:
                  Code:
                  AcceptPathInfo Off
                  Attached Files
                  Last edited by Malachite; 07-04-2012, 13:41.

                  Comment


                  • #10
                    Hmm..
                    Offensichtlich ist dir nicht klar, was ein XSS Angriff ist und wie er funktioniert.

                    Und egal welche Dinge du an den Haaren herbeiziehen möchtest, die Aussage "PHP_SELF ist böse, weil es XSS Attacken ermöglichen kann" hat Bestand.
                    Wir werden alle sterben

                    Comment


                    • #11
                      Hallo,

                      ich verstehe einfach nicht, warum man extra Tipparbeit auf sich nimmt, nur um eine Sicherheitslücke einzubauen. Wenn man statt
                      HTML Code:
                      <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
                      einfach
                      HTML Code:
                      <form action="" method="POST">
                      schreibt, hat man sich 34 Zeichen und diese XSS-Lücke gespart. Will man zusätzlich noch die GET-Parameter aus der URL loswerden, kann man auch action="?" schreiben.

                      Gruß,

                      Amica
                      Last edited by AmicaNoctis; 08-04-2012, 01:27.
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Comment


                      • #12
                        OT: action="" in HTML5: HTML5: Verwirrung über action-Attribut eines Formulares - PHP Forum: phpforum.de Ich bin immer noch nicht schlauer als: „Yeah… *schulterzuck*“

                        Comment


                        • #13
                          Originally posted by mermshaus View Post
                          OT: action="" in HTML5: HTML5: Verwirrung über action-Attribut eines Formulares - PHP Forum: phpforum.de Ich bin immer noch nicht schlauer als: „Yeah… *schulterzuck*“
                          Okay, wenn es nicht leer sein darf: action="?"

                          Originally posted by http://www.w3.org/TR/html5/urls.html#valid-non-empty-url
                          A URL is a string used to identify a resource.

                          A URL is a valid URL if at least one of the following conditions holds:

                          The URL is a valid URI reference [RFC3986].

                          The URL is a valid IRI reference and it has no query component. [RFC3987]

                          The URL is a valid IRI reference and its query component contains no unescaped non-ASCII characters. [RFC3987]

                          The URL is a valid IRI reference and the character encoding of the URL's Document is UTF-8 or a UTF-16 encoding. [RFC3987]

                          A string is a valid non-empty URL if it is a valid URL but it is not the empty string.

                          A string is a valid URL potentially surrounded by spaces if, after stripping leading and trailing whitespace from it, it is a valid URL.

                          A string is a valid non-empty URL potentially surrounded by spaces if, after stripping leading and trailing whitespace from it, it is a valid non-empty URL.
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Comment


                          • #14
                            Hi,
                            Originally posted by AmicaNoctis View Post
                            Hallo,
                            ich verstehe einfach nicht, warum man extra Tipparbeit auf sich nimmt, nur um eine Sicherheitslücke einzubauen. Wenn man statt
                            HTML Code:
                            <form action="<?php echo $_SERVER
                            ['PHP_SELF'] ?>" method="POST">
                            einfach
                            HTML Code:
                            <form action="" method="POST">
                            schreibt, hat man sich 34 Zeichen und diese XSS-Lücke gespart. Will man zusätzlich
                            noch die GET-Parameter aus der URL loswerden, kann man auch action="?" schreiben.
                            Gruß,
                            Amica
                            Da kann man sich auch die Frage stellen, warum jemand meterweise HTML-Code mit echo ausgibt, anstatt den PHP-Block einfach zu schließen, um sich diese
                            umständliche Art, HTML-Code zu schreiben, zu ersparen. Wahrscheinlich denken diese, jetzt hab' ich 'ne PHP-Seite, also muß auch alles via PHP ausgegeben werden,
                            eben wie dieses action-Attribut im Formular.

                            Gruß
                            Günni

                            Comment

                            Working...
                            X